2016-03-28 21 views
-2

Öğelerin bir listesi var {1,2,3,4,5} ve her elementin tüm kombinasyonlarını bulmak istiyorum, yani, {1,2,3,4,5, 12,13,14,15,23,24,25,34,35 ve benzeri} in içinde R Bunun için dahili bir fonksiyon var mı?Her elemanın kombinasyonlarını bulma

+2

Eğer aradığınız işlevi' dır combn:

range_combn <- function(x, m){ unlist(lapply(m, function(m) apply(combn(x, m), 2, function(x) as.numeric(paste0(as.character(x), collapse=""))))) } 

örn: Burada

öyle bir fonksiyondur –

cevap

0

Bu deneyebilirsiniz:

aynı kod biraz daha kompakt bir şekilde yazılmış olabilir
g1 <- expand.grid(0:5,1:5) #create a data.frame with all combinations 
v <- as.numeric(paste0(g1[,1], g1[,2])) #convert combinations into numbers 
v <- sort(v[(v%%11)!=0]) #sort and remove duplicate figures, like 44 or 55 
v 
#[1] 1 2 3 4 5 12 13 14 15 21 23 24 25 31 32 34 35 41 42 43 45 51 52 53 54 

: o yana,

v <- sort(as.numeric(apply(expand.grid(0:5,1:5), 1, paste, collapse=""))) 
v <- v[!!v%%11] 

performans konularında, bu kısa versiyonu muhtemelen daha yavaş olacaktır İlk sürüm tamamen vectorized ise apply() ile bir döngü kullanır.

0

Aradığınız şey bu mu?

unlist(lapply(1:2, function(m) apply(combn(1:5, m), 2, function(x) as.numeric(paste0(as.character(x), collapse=""))))) 
[1] 1 2 3 4 5 12 13 14 15 23 24 25 34 35 45 

1:2 seçme elemanlarının sayısının aralığı (?combn da m) ve 1:5 kombinasyonunun vektör kaynak (combn içinde x) 'dir. `) (

range_combn(1:5, 1:3) 
[1] 1 2 3 4 5 12 13 14 15 23 24 25 34 35 45 123 124 125 134 135 145 234 235 245 345 

range_combn(1:5, 1:2) 
[1] 1 2 3 4 5 12 13 14 15 23 24 25 34 35 45