2016-06-17 112 views
6

ho primo vettore, ad esempio: x=1:10 e secondo con numeri primi, ad esempio y=c(2,3,5,7)Divisione due vettori

E voglio sorta vettore x: divisibile per 2, divisibile per 3, ecc Così, l'uscita sarebbe simile a questa: 2 4 6 8 10 3 9 5 7

risposta

6

utilizzando apply loop e mod:

unique(unlist(sapply(y, function(i)x[x%%i == 0]))) 
# [1] 2 4 6 8 10 3 9 5 7 

o utilizzando as.logical invece di ==, suggerito da @ZheyuanLi:

unique(unlist(sapply(y, function(i) x[!as.logical(x%%i)]))) 

approccio simile utilizzando expand.grid invece di applicare:

xy <- expand.grid(x, y) 
unique(xy[ xy[,1]%%xy[,2] == 0, 1]) 
0

Un'altra opzione è

unique(rep(x, length(y))[rep(x, length(y))%% rep(y, each = length(x))==0]) 
#[1] 2 4 6 8 10 3 9 5 7 
Problemi correlati