mapply和.mapply的区别

5

我试图找到关于.mapply的信息,但没有找到好的解释。所以,有人能解释一下mapply和.mapply之间的区别吗?

例如: 为什么 .mapply(cbind,mylist,NULL) 可以工作,但这个不行:

mapply(cbind,mylist,NULL)

?

    mylist=list(list(data.frame(a=3,b=2,c=4),data.frame(d=5,e=6,h=8),data.frame(k=2,e=3,b=5,m=5)),
                  list(data.frame(a=32,b=22,c=42),data.frame(d=5,e=63,h=82),data.frame(k=2,e=33,b=5,m=5)),
                  list(data.frame(a=33,b=21,k=41,c=41),data.frame(d=5,e=61,h=80),data.frame(k=22,e=3,b=5,m=5)))

?
1个回答

5

来自? .mapply

.mapply是“裸骨”版本,可用于其他R包中。

因此,.mapply只是mapply的简单版本(参数更少),可用于自己的软件包中。实际上,mapply在内部调用.mapply,然后进行一些结果简化。

mapply <- 
function (FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE) 
{
    FUN <- match.fun(FUN)
    dots <- list(...)
    answer <- .mapply(FUN, dots, MoreArgs) 
    ## ...
    ## the rest of the function is to simplify the result 

}

根据OP的编辑更新

mapply(cbind,mylist,NULL)

由于此处的 NULL 被视为点参数而不是 MoreArgs 参数,因此无法正常工作。实际上,您可以使用以下方法使用 .mapply 重现相同的错误:
 .mapply(cbind,list(mylist,NULL),NULL)

如果您明确写出参数名称,就可以避免在mapply中出现此错误;

 mapply(cbind,mylist,MorgeArgs=NULL)

但是由于mapply中的一行代码:

dots <- list(...)

您使用 .mapply 时将无法得到与之相同的结果。

最后,如果您只想将嵌套列表 unlist,最好使用类似以下内容的东西:

lapply(mylist,unlist)   # faster and you you get the same output as .mapply

请看我添加的具体示例。那里有什么区别? - user1665355
谢谢。但是lapply(mylist,unlist).mapply(cbind,mylist,NULL)给出了不同的结果... - user1665355

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接