2013-11-26 4 views
-1

У меня есть список простых чисел с множителем I, используя outer() и upper.tri(), чтобы получить уникальный набор чисел.R - Список комбинаций с external() и expand.grid()

primes <- c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29) 
m <- outer(primes, primes, "*") 
unq <- m[which(upper.tri(m))] 

> unq 
6 10 15 14 21 35 22 33 55 77 26 39 65 91 143 34 51 85 119 187 221 38 57 95 133 209 247 323 46 69 115 161 253 299 391 437 58 87 145 203 319 377 493 551 667 

Каждый из исходных простых чисел представляет собой набор из двух чисел:

a2 <- c(1,1) 
a3 <- c(1,2) 
a5 <- c(2,2) 
a7 <- c(1,3) 
a11 <- c(1,4) 
a13 <- c(2,3) 
a17 <- c(2,4) 
a19 <- c(3,3) 
a23 <- c(3,4) 
a29 <- c(4,4) 

Сочетание двух наборов из двух чисел производит 4 номера

expand.grid(a2,a3) 

1 1 
1 1 
1 2 
1 2 

Так что я бы как сделать, это иметь список списков с каждым простым числом, имеющим все 4 возможные комбинации. я пытался что-то вроде этого, но я пропускаю некоторые основы здесь:

outer(a ,a , "expand.grid") 

Так что результат будет выглядеть примерно так это в первый штрихом:

6 c(11, 11, 12, 12) 
+1

Я этого не делаю. Какова связь между словами 'a7' и' c (1,3) '? Почему вы генерируете комбинации? Почему существует только 4 возможных сочетания? – thelatemail

ответ

2

Я не уверен, что я правильно понимаю , но я надеюсь, что это поможет:

#function to `outer` 
fun <- function(x, y) 
{ 
a1 <- get(paste0("a", x)) 
a2 <- get(paste0("a", y)) 
res <- apply(expand.grid(a1, a2), 1, paste, collapse = "") 
res2 <- paste(res, collapse = ";") 

return(res2) 
} 

#`outer` a vectorized `fun` 
m2 <- outer(primes, primes, Vectorize(fun)) 
#select `upper.tri` 
unq2 <- m2[upper.tri(m2)] 

#combine to a list 
myls <- lapply(as.list(unq2), function(x) as.numeric(unlist(strsplit(x, ";")))) 
names(myls) <- unq 

myls 
#$`6` 
#[1] 11 11 12 12 

#$`10` 
#[1] 12 12 12 12 

#$`15` 
#[1] 12 22 12 22 

#$`14` 
#[1] 11 11 13 13 
#... 
Смежные вопросы