如何在R的sweep函数中使用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

扫描(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 = 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不用担心。很高兴为您提供帮助,祝您工作顺利:-)