2013-06-06 2 views
4

세 + 치수 외부 사용 :만들기 말도 안되는 단어 -() 나는 주어진 첫 자음, 모음의 목록, 마지막 자음 말도 안되는 단어를 만드는 오전 R

initial_consonants <- c("r", "w", "h", "sp", "st", "sk") 
vowels <- c("i", "u", "I", "U", "E", "V", "@") 
final_consonants <- c("f", "ts", "rS", "rv", "rl", "Dz", "lts", "bz") 

나는 가능한 모든 좀하고 싶습니다 (6 * 7 * 8 = 336) 넌센스 단어는 첫 번째 자음, 모음 및 최종 자음 세트를 제공합니다. 이 함수를 다음과 같이 만들었습니다 :

create_CVC_words <- function(initial_consonant, vowel, final_consonant){ 
paste(initial_consonant, vowel, final_consonant, sep = "") -> CVC_word 
} 

그러나 3 차원을 모두 고려하여 적용하는 방법을 모르겠습니다. 적응/

rif rits rirS rirv rirl riDz rilits ribz 
ruf ruts rurS ... 
. 
. 
. 
wif wits ... 

내가 사용할 수있는 방법 :

outer(initial_consonants, vowels, final_consonants, FUN = create_CVC_words) -> table 
table 
    [,1] [,2] [,3] [,4]  [,5] [,6] [,7] 
[1,] "rif" "rults" "rIrl" "rUrS" "rEf" "rVlts" "[email protected]" 
[2,] "wits" "wubz" "wIDz" "wUrv" "wEts" "wVbz" "[email protected]" 
[3,] "hirS" "huf" "hIlts" "hUrl" "hErS" "hVf" "[email protected]" 
[4,] "spirv" "sputs" "spIbz" "spUDz" "spErv" "spVts" "[email protected]" 
[5,] "stirl" "sturS" "stIf" "stUlts" "stErl" "stVrS" "[email protected]" 
[6,] "skiDz" "skurv" "skIts" "skUbz" "skEDz" "skVrv" "[email protected]" 

하지만 내가 필요로하는 모든 가능한 조합을하는 것입니다, 즉 :() 나에게 다양 마지막 자음과 첫 자음과 모음의 조합을 제공합니다 외부 내 할 일은? 또한 큰 감각을 잃지 않는 단어, 즉 biyllabic CVCVC의 경우이 작업을 수행해야하므로 필자가 고려해야 할 차원의 수는 3 개로 제한되지 않습니다.

편집 : outer()하는 방법에 관한 일반적인 질문을 보았습니다. 여기에 n 개의 치수를 넣으십시오 : How to generalize outer to n dimensions? 문제를 해결할 수 없었습니다.

답변

3

당신은 expand grid 모든 다른 조합을 만들 수 있습니다

apply(expand.grid(initial_consonants, vowels, final_consonants), 1, function(x)create_CVC_words(x[1], x[2], x[3])) 

이 당신이 원하는합니까 무엇을?

+0

예! 그리고 문자열의 형식에서도, 내가 원했던 형식이었습니다. - 감사합니다! – Annemarie

3
do.call(paste0, expand.grid(initial_consonants, vowels, final_consonants)) 
3

이 방법은 거의 항상 느린 outer보다 expand.grid로 다른 두 응답보다 빠르게의 의미 원래 outer 더 코딩하지만 스틱이 필요합니다

ends <- outer(vowels, final_consonants, paste0) 
endsL <- lapply(1:nrow(ends), function(i) ends[i, ]) 
unlist(lapply(endsL, function(x) outer(initial_consonants, x, paste0)))