如何在R的sweep函数中使用STATS
扫描(x,边距,统计,FUN=myfun,check.MARGIN=TRUE,…) 是否可以在用户定义的函数中使用STATS。这里是糠秕如何在R的sweep函数中使用STATS,r,indexing,R,Indexing,扫描(x,边距,统计,FUN=myfun,check.MARGIN=TRUE,…) 是否可以在用户定义的函数中使用STATS。这里是糠秕 a <- matrix(1:9,3) mysum <- function (x,param){ print(param) #print(x + ax) return (x + param) } ak = c(100,200,300) a_new <- sweep(a,2,STATS = c(1,2,3),FUN = functi
a <- matrix(1:9,3)
mysum <- function (x,param){
print(param)
#print(x + ax)
return (x + param)
}
ak = c(100,200,300)
a_new <- sweep(a,2,STATS = c(1,2,3),FUN = function(x,i) mysum(x,ak[i]))
a我认为对sweep
的功能存在误解;请看这篇文章,看一些很好的例子
底线是,您需要一个汇总统计(具有适当的维度,请参见下文)和一个数学运算,根据该运算,您可以从输入矩阵中“扫描”该汇总统计
在您的例子中,摘要统计是长度length(ak)=3的向量。因此,您可以使用FUN
中定义的数学运算从a
扫描ak
;我们如何扫描取决于边距;由于a
是一个3x3
矩阵,我们可以从a
按列或按行扫描ak
就前者而言
sweep(a, 2, ak, FUN = "+")
# [,1] [,2] [,3]
#[1,] 101 204 307
#[2,] 102 205 308
#[3,] 103 206 309
至于后者呢
sweep(a, 1, ak, FUN = "+")
# [,1] [,2] [,3]
#[1,] 101 104 107
#[2,] 202 205 208
#[3,] 303 306 309
在这里,我们通过将(FUN=“+”
)ak
添加到a
来进行列/行扫描
显然,您可以定义自己的函数。例如,如果我们想按列将ak
添加到a
的平方值中,我们可以按以下方式使用sweep
sweep(a, 2, ak, FUN = function(x, y) x^2 + y)
# [,1] [,2] [,3]
#[1,] 101 216 349
#[2,] 104 225 364
#[3,] 109 236 381
第一个函数参数x
指的是a
的选定向量(此处为列向量,因为边距=2
);第二个函数参数y
引用向量ak
重要的是确保尺寸“匹配”;例如,如果我们这样做
a <- a <- matrix(1:9,3)
ak <- c(100, 200)
sweep(a, 2, ak, FUN = "+")
欢迎使用堆栈溢出。请适当。此外,为了使您的问题具有可复制性。我用适当的示例编辑了我的代码。“第一个函数参数x指的是a的选定向量(这里是列向量,因为边距=2);第二个函数参数y指的是向量ak。”这就是我要找的。虽然我事先就知道了。非常感谢您解释用户定义函数的使用。这对于进行大型数据操作的人来说非常有用(我有45000列;-)@ankitjoshi不用担心。很高兴为您提供帮助,祝您工作顺利:-)