【问题标题】:Difference mapply and .mapply区别 mapply 和 .mapply
【发布时间】:2015-03-07 23:51:00
【问题描述】:

我试图找出有关 .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)))

?

【问题讨论】:

    标签: r apply


    【解决方案1】:

    来自?.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
    

    【讨论】:

    • 查看我添加的具体示例。有什么区别?
    • 谢谢。但是lapply(mylist,unlist).mapply(cbind,mylist,NULL) 给出不同的结果...
    猜你喜欢
    • 2012-12-29
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2019-09-10
    • 2013-10-12
    相关资源
    最近更新 更多