dou*_*oug 95 statistics r
当我查看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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,参数类似于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
Run Code Online (Sandbox Code Playgroud)
总而言之,我正在寻找的是一个或两个示例性用例sweep.
请不要背诵或链接到R文档,邮件列表或任何"主要"R源 - 假设我已经阅读过它们.我感兴趣的是R程序员/分析师sweep在他们自己的代码中使用的经验.
小智 75
sweep()通常在按行或按列操作矩阵时使用,而操作的其他输入对于每个行/列都是不同的值.无论是按行还是列操作,都由MARGIN定义,如同申请.用于我称之为"其他输入"的值由STATS定义.因此,对于每一行(或列),您将从STATS获取一个值并在FUN定义的操作中使用.
例如,如果要将1添加到您定义的矩阵的第1行,2到2,等等,您将执行以下操作:
sweep (M, 1, c(1: 4), "+")
Run Code Online (Sandbox Code Playgroud)
我坦率地不理解R文档中的定义,我只是通过查找示例来学习.
Bra*_*orn 15
sweep()可以很好地逐列或逐行系统地操作大矩阵,如下所示:
> print(size)
Weight Waist Height
[1,] 130 26 140
[2,] 110 24 155
[3,] 118 25 142
[4,] 112 25 175
[5,] 128 26 170
> sweep(size, 2, c(10, 20, 30), "+")
Weight Waist Height
[1,] 140 46 170
[2,] 120 44 185
[3,] 128 45 172
[4,] 122 45 205
[5,] 138 46 200
Run Code Online (Sandbox Code Playgroud)
当然,这个例子很简单,但是改变STATS和FUN参数,其他操作也是可能的.
这个问题有点陈旧,但由于我最近遇到了这个问题,因此可以在统计函数的源代码中找到扫描的典型用法cov.wt,用于计算加权协方差矩阵.我正在看R 3.0.1中的代码.这里sweep用于在计算协方差之前减去列平均值.在代码的第19行,导出了居中向量:
center <- if (center)
colSums(wt * x)
else 0
Run Code Online (Sandbox Code Playgroud)
在第54行,它被扫出矩阵
x <- sqrt(wt) * sweep(x, 2, center, check.margin = FALSE)
Run Code Online (Sandbox Code Playgroud)
代码的作者使用默认值FUN = "-",这让我困惑了一段时间.
| 归档时间: |
|
| 查看次数: |
43661 次 |
| 最近记录: |