2016-09-29 39 views
0

我有兩個向量。我想對這兩個向量的每個可能的組合應用一個函數。爲了說明,假設我有以下兩個向量。r將函數應用於兩個列表

pets <- c('dog','cat','lemur') 
fruit <- c('banana','apple','papaya') 

我想將函數應用於以下變量組合,並將每個函數調用的結果與變量值一起保存。

[dog, banana] 
[dog, apple] 
[dog, papaya] 
[cat, banana] 
[cat, apple] etc... 

什麼是在r中實現這個最好的方法?感覺這應該是申請家庭的工作。

+0

可能'expand.grid(pets,fruit)' –

+1

我看到expand.grid創建了這兩個向量的每個組合,但我希望能夠在每個組合上運行一個函數 – datavoredan

+1

您可以嘗試像這樣'dplyr: :mutate(expand.grid(pets,fruit),function_output = paste(var1,var2))'其中'paste()'是一個示例函數 – Megatron

回答

2
levels(interaction(pets, fruit, sep = ', ')) 

輸出繼電器:

[1] "cat, apple" "dog, apple" "lemur, apple" 
[4] "cat, banana" "dog, banana" "lemur, banana" 
[7] "cat, papaya" "dog, papaya" "lemur, papaya" 
+0

嗨@datavoredan如果這個或任何答案已經解決了你的問題,請考慮接受它點擊複選標記。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – mpalanco

1

expand.grid是你想要的。 ?expand.grid指出:

從提供的矢量或因子的所有組合創建數據幀。

所以,你可以這樣做:

e <- expand.grid(pets, fruit) 
df <- data.frame(col=apply(e,1,function(x) paste0("[",x[1],", ",x[2],"]"))) 
# OR if brackets are not important 
# data.frame(col=apply(e,1,paste,collapse=", ")) 

      # col 
# 1 [dog, banana] 
# 2 [cat, banana] 
# 3 [lemur, banana] 
# 4 [dog, apple] 
# 5 [cat, apple] 
# 6 [lemur, apple] 
# 7 [dog, papaya] 
# 8 [cat, papaya] 
# 9 [lemur, papaya] 

請注意,數據幀e已經包含兩個向量的可能組合。只有當你想格式化時,下一行纔是必要的。

相關問題