Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R Map vs Mapply-Mapply的意外行为_R_Mapply - Fatal编程技术网

R Map vs Mapply-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

我有一个函数列表和一个数据帧列表(所有函数都返回一个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      ?      ?           ?     
 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
中,并阅读帮助文件