r将功能应用于两个列表

时间:2016-09-29 21:25:57

标签: r function apply lapply

我有两个向量。我想将函数应用于这两个向量的每个可能组合。为了说明,假设我有以下两个向量。

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

我想将函数应用于以下变量组合,并将每个函数调用的结果与变量值一起保存。

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

在r中实现这一目标的最佳方法是什么?感觉应该是申请家庭的工作。

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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已包含两个向量的可能组合。只有在您想要格式化下一行时才需要下一行。