r - 如何使用 'sweep'函数

标签 r statistics

当我查看 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 返回的结果取决于传入的函数。

扫描实际操作:

# 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

最佳答案

sweep() 通常用于按行或按列操作矩阵,并且操作的另一个输入是每行/列的不同值。是按行操作还是按列操作是由MARGIN定义的,如apply()。用于我所谓的“其他输入”的值由 STATS 定义。 因此,对于每一行(或列),您将从 STATS 中获取一个值并在 FUN 定义的操作中使用。

例如,如果您想将 1 添加到您定义的矩阵的第一行,将 2 添加到第二行,依此类推,您将执行以下操作:

sweep (M, 1, c(1: 4), "+")

坦白说我也不明白R文档中的定义,我只是通过查找示例来了解的。

关于r - 如何使用 'sweep'函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444889/

相关文章:

矩阵乘法的 R 错误 : non-conformable arguments

statistics - 您何时以及为什么要使用概率密度函数?

r - R中的两因素方差分析误差条图

在同一个表中读取 R 中的多个文件,作为不同的变量

R 中 Cor() 的结果没有按照我的预期进行逻辑评估

r - Shiny 应用程序中的 "read_excel"

r - 在 R 中的两个数据框中按组比较日期

python - scipy.stats.zipf 中的参数是什么意思?

php - 需要 php mysql 统计图表示例脚本

R:覆盖栅格图层的xy坐标