我有一个函数列表和一个数据帧列表(所有函数都返回一个绘图对象)。我想将i th 函数应用于i th 数据集。我尝试使用mapply,如下所示:
mapply(function(f,x) f(x), list_functions, list_datasets)
当我尝试这个时,我会得到意想不到的东西。这是输出的样子:
data List,7 List,3 List,7
layers List,1 List,3 List,2
scales ? ? ?
mapping List,3 List,3 List,4
theme List,0 List,0 List,0
coordinates List,1 List,1 List,1
facet List,7 List,1 List,1
plot_env ? ? ?
labels List,3 List,4 List,4
当然,当然,我想要的是要返回的绘图对象列表。
然后我尝试了这个:
Map(function(f,x) f(x), list_functions, list_datasets)
这次我获得的输出正是我想要的 - 一个图表列表。
所以,虽然问题已经解决,但我非常想知道为什么mapply
表现得像这样。
任何指针?
谢谢& Merry x-mas !!
答案 0 :(得分:3)
mapply
的默认行为是尽可能简化输出。如果要覆盖该行为,请在命令中添加SIMPLIFY = FALSE
。
这演示了行为(我无权访问您的函数或数据,因此我无法重新创建您在此处共享的内容)。
由于输出是可以简化的,因此结果将是矩阵:
> mapply(rep, 1:4, 4)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 1 2 3 4
[3,] 1 2 3 4
[4,] 1 2 3 4
覆盖该行为:
> mapply(rep, 1:4, 4, SIMPLIFY = FALSE)
[[1]]
[1] 1 1 1 1
[[2]]
[1] 2 2 2 2
[[3]]
[1] 3 3 3 3
[[4]]
[1] 4 4 4 4
您仍然可以使用标准[row, col]
类型的方法访问输出中的项目。