2014-06-23 63 views
3

我想在函數內創建交叉連接data.table。說,我們有一個向量vals <- c("yes", "no")。現在這個工程:CJ(vals, vals)。但是,根據功能輸入,我可能需要創建例如改爲CJ(vals, vals, vals, vals)。類似於在函數內交叉連接data.table

vals <- c("yes", "no") 
n <- 4 
CJ(rep(vals, n)) 

顯然不起作用。如何以靈活的方式指定交叉連接的向量?

回答

5

你可以使用...這是用來引用從調用函數傳遞的參數...?

require(data.table) 
f <- function(...){ 
    CJ(...) 
} 

f(c(1:2) , c(3:4)) 
# V1 V2 
#1: 1 3 
#2: 1 4 
#3: 2 3 
#4: 2 4 

編輯:這個怎麼樣?

do.call(CJ, replicate(n, vals, simplify=FALSE)) 

#  V1 V2 V3 V4 
# 1: no no no no 
# 2: no no no yes 
# 3: no no yes no 
# 4: no no yes yes 
# 5: no yes no no 
# 6: no yes no yes 
# 7: no yes yes no 
# 8: no yes yes yes 
# 9: yes no no no 
# 10: yes no no yes 
# 11: yes no yes no 
# 12: yes no yes yes 
# 13: yes yes no no 
# 14: yes yes no yes 
# 15: yes yes yes no 
# 16: yes yes yes yes 
+1

但同樣,在這種情況下,我需要明確寫入'F(丘壑,丘壑)'與兩列創建'data.table'和'F(瓦爾斯瓦爾斯瓦爾斯,瓦爾斯)'創建一個四列。但是,我只想指定重複次數(例如'n = 2'或'n = 4'),而不是多次明確寫下向量名稱。 – AnjaM

+0

非常感謝,編輯完全符合我的要求!我一直在玩'do.call',但我沒有想過使用'replicate'。 – AnjaM

+0

@AnjaM我認爲** @ Arun **已經很好地回答了你的問題。可以說,他應該把這個作爲自己的答案,並且贏得了自己同行的讚譽,讚美和欽佩,但我並沒有抱怨。 –