R Map vs Mapply-Mapply的意外行为
我有一个函数列表和一个数据帧列表(所有函数都返回一个plot对象)。我想对第I个数据集应用第I个函数。为此,我尝试使用mapply,如下所示:R Map vs Mapply-Mapply的意外行为,r,mapply,R,Mapply,我有一个函数列表和一个数据帧列表(所有函数都返回一个plot对象)。我想对第I个数据集应用第I个函数。为此,我尝试使用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
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
当然,我想要的是一个要返回的plot对象列表
然后我试了一下:
Map(function(f,x) f(x), list_functions, list_datasets)
这一次,我得到的输出正是我想要的——一个绘图列表
因此,在问题得到解决的同时,我很想弄清楚mapply
为何会这样做
有什么建议吗
谢谢&圣诞快乐 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]
方法从输出中访问项目,这种方法可以用于任何矩阵。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]
方法从输出中访问项目,这种方法可以用于任何矩阵。将SIMPLIFY=FALSE
添加到mapply
中,请阅读帮助文件将SIMPLIFY=FALSE
添加到mapply
中,并阅读帮助文件