plyr包为什么以及如何使用未定义的函数?

时间:2016-03-22 12:10:47

标签: r function plyr

问题标题可能会背叛一些误解,欢迎您指出。尽管如此,一些plyr函数还是有些神秘的。例如,查看laply函数,其编写为:

function (.data, .fun = NULL, ..., .progress = "none", .inform = FALSE, 
    .drop = TRUE, .parallel = FALSE, .paropts = NULL) 
{
    if (is.character(.fun)) 
        .fun <- do.call("each", as.list(.fun))
    if (!is.function(.fun)) 
        stop(".fun is not a function.")
    if (!inherits(.data, "split")) 
        .data <- as.list(.data)
    res <- llply(.data = .data, .fun = .fun, ..., .progress = .progress, 
        .inform = .inform, .parallel = .parallel, .paropts = .paropts)
    list_to_array(res, attr(.data, "split_labels"), .drop)
}
<environment: namespace:plyr>

格式化结果的最后一个调用使用函数list_to_array。该函数未在laply内定义,也不存在于外部(检查exists("list_to_array"))。然而laply有效(当然 - 我亲自使用过它)!这怎么可能?

我想知道laply如何将列表元素组合到一个数组中,以便我知道它的效率如何。还有其他方法,例如do.call(rbind, res)(在2D情况下)。了解laply如何做到这一点有助于我做出明智的决定。

其他示例包括(非详尽):splitter_a中的aaplyalply中的splitter_dddply中的list_to_dataframe以及ldply内的simplify2array 1}}。相比之下,sapply中的sapply在{{1}}之外明确定义,偶尔会有用。

0 个答案:

没有答案