每当我想在 R 中执行 \'map\'py 操作时,我通常会尝试使用 apply 系列中的函数。但是,我从未完全理解它们之间的区别 -- 如何 {sapply、lapply 等}...
每当我想在 R 中执行某些\'map\'py 操作时,我通常会尝试使用该 apply
系列中的函数。
然而,我从来没有完全理解它们之间的区别——{ sapply
, lapply
等} 如何将函数应用于输入/分组输入,输出会是什么样子,甚至输入可以是什么——所以我经常只是仔细检查它们直到得到我想要的。
有人可以解释一下何时如何使用哪一个吗?
我目前的理解(可能不正确/不完整)是......
p5
p6
apply(matrix, 1/2, f)
:输入是一个矩阵。输出是一个向量,其中元素 i
是 f(矩阵的第 i 行/第 i 列)
tapply(vector, grouping, f)
:输出是一个矩阵/数组,其中矩阵/数组中的元素是 f
向量分组 g
,并 g
被推送到行/列名称
by(dataframe, grouping, f)
:设为 g
分组。应用于 f
组/数据框的每一列。漂亮地打印分组和 f
每列的值。
aggregate(matrix, grouping, f)
:类似于 by
,但聚合不会漂亮地打印输出,而是将所有内容粘贴到数据框中。
附带问题:我还没有学过 plyr 或 reshape - 是否会 plyr
完全 reshape
取代这些?
附注:以下是各种 plyr
功能与基本 *apply
功能的对应关系(来自 plyr 网页 http://had.co.nz/plyr/ )
Base function Input Output plyr function
---------------------------------------
aggregate d d ddply + colwise
apply a a/l aaply / alply
by d l dlply
lapply l l llply
mapply a a/l maply / mlply
replicate r a/l raply / rlply
sapply l a laply
的目标之一 plyr
是为每个函数提供一致的命名约定,在函数名称中编码输入和输出数据类型。它还提供了输出的一致性,因为来自的输出 dlply()
可以轻松传递到以 ldply()
产生有用的输出等。
从概念上讲,学习 plyr
并不比理解基本 *apply
功能更困难。
plyr
和 reshape
函数几乎取代了我日常使用中的所有函数。但是,从 Plyr 简介文档中也可以看出:
相关函数
tapply
和sweep
在中没有对应函数plyr
,并且仍然有用。merge
对于将摘要与原始数据相结合很有用。