2017-12-28 17 views
2

In R habe ich einen Vektor mit ganzen Zahlen, die überprüft werden sollen, ohne Rest für mehrere Werte teilbar sein.Wie modulo zu vektorisieren?

v <- c(3, 4, 10, 11, 12) 
v %% 4 == 0 | v %% 10 == 0 #... this might include 100 checks or more 

Ich suche nach einer Vektorisierung dieser (wie v %% c(4, 10)), die eine Matrix oder etwas ähnliches zurückkehren könnte.


programmiert ich eine Funktion, die es tun, aber ich frage mich, ob es bereits eine solche Funktion existiert ich wieder statt „neu zu erfinden“, sie wiederverwenden können.

`%V%` <- function(x, y){ 
    ret <- matrix(nrow = length(x), ncol = length(y)) 
    for(i in 1:ncol(ret)){ 
    ret[, i] <- x %% y[i] 
    } 
    return(ret) 
} 
v %V% c(4, 10) 

Für meinen ursprünglichen Zweck laufen würde ich jetzt apply(v %V% c(4, 10), 1, function(x) any(x == 0)) oder meine Funktion entsprechend ändern.

+1

Sie können einfach tun 'sapply (c (4, 10) , Funktion (i) v %% i) ' – Sotos

+3

oder:' äußere (v, c (4,10), '%%') ' – Jaap

Antwort

3

Sie können das outer -Funktion erreichen, was Sie wollen:

outer(v, c(4,10), '%%') == 0 

die gibt:

 [,1] [,2] 
[1,] FALSE FALSE 
[2,] TRUE FALSE 
[3,] FALSE TRUE 
[4,] FALSE FALSE 
[5,] TRUE FALSE