【发布时间】:2011-03-27 13:42:22
【问题描述】:
当我查看 R Packages 的源代码时,我看到函数 sweep 经常使用。
有时它会在一个更简单的函数就足够的情况下使用(例如,apply),
其他时候,如果没有它,就不可能确切知道它在做什么
花相当多的时间来单步调试它所在的代码块。
我可以使用更简单的函数重现sweep 的效果这一事实表明
我不明白sweep 的核心用例,而且这个功能经常被使用的事实表明它非常有用。
上下文:
sweep 是 R 标准库中的一个函数;它的论点是:
sweep(x, MARGIN, STATS, FUN="-", check.margin=T, ...)
# x is the data
# STATS refers to the summary statistics which you wish to 'sweep out'
# FUN is the function used to carry out the sweep, "-" is the default
如您所见,参数类似于apply,尽管sweep 需要
多了一个参数,STATS。
另一个关键区别是sweep 返回一个与输入数组形状相同 的数组,而apply 返回的结果取决于传入的函数。
sweep 在行动:
# e.g., use 'sweep' to express a given matrix in terms of distance from
# the respective column mean
# create some data:
M = matrix( 1:12, ncol=3)
# calculate column-wise mean for M
dx = colMeans(M)
# now 'sweep' that summary statistic from M
sweep(M, 2, dx, FUN="-")
[,1] [,2] [,3]
[1,] -1.5 -1.5 -1.5
[2,] -0.5 -0.5 -0.5
[3,] 0.5 0.5 0.5
[4,] 1.5 1.5 1.5
总之,我正在寻找的是sweep 的一个或两个示例性用例。
请不要背诵或链接到 R 文档、邮件列表或任何“主要”R 资源——假设我已阅读它们。我感兴趣的是经验丰富的 R 程序员/分析师如何在自己的代码中使用 sweep。
【问题讨论】:
-
M-dx 不会复制您的结果。您回答了自己的问题。
-
apply的唯一用法是我可以计算出的结果,类似于t(apply(t(M), 2, "-", dx)),但这很讨厌。
标签: r statistics