问题标题可能会背叛一些误解,欢迎您指出。尽管如此,一些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
中的aaply
和alply
中的splitter_d
,ddply
中的list_to_dataframe
以及ldply
内的simplify2array
1}}。相比之下,sapply
中的sapply
在{{1}}之外明确定义,偶尔会有用。