每当我想在R中做一些“map”py的事情时,我通常会尝试使用apply
系列中的函数。
然而,我从来没有完全理解它们之间的区别——{sapply
、lapply
等}如何将函数应用于输入/分组输入,输出会是什么样子,甚至输入可以是什么——所以我经常只是浏览它们,直到我得到我想要的。
谁能解释一下什么时候用哪个?
我目前(可能不正确/不完整)的理解是…
sapply(vec, f)
:输入是一个向量。输出是一个向量/矩阵,其中元素i
是f(vec[i])
,如果f
有多元素输出,则为您提供一个矩阵
lapply(vec, f)
:与sapply
相同,但输出是列表?
apply(matrix, 1/2, f)
:输入是矩阵。输出是向量,其中元素i
是f(矩阵的行/列i)tapply(vector, grouping, f)
:输出是一个矩阵/数组,其中矩阵/数组中的元素是向量分组g
处f
的值,g
被推送到行/列名称by(dataframe, grouping, f)
:让g
是一个分组。将f
应用于组/数据框的每一列。漂亮地打印分组和每一列的f
值。aggregate(matrix, grouping, f)
:类似于by
,但不是漂亮地打印输出,聚合将所有内容粘贴到数据框中。附带问题:我还没有学习plyr或重塑——plyr
或reshape
会完全取代所有这些吗?