难以通过即时运行功能正常运行

问题描述 投票:0回答:2

大家晚上好,

因此,我正在尝试使用基于第5列中的二进制变量的数据框使用lapply函数。

我所做的功能非常简单。一个简单的t.test,效果很好

t.test.by.ind = function(x, ind) {
  stopifnot(all(ind %in% c(0, 1)))
  return(t.test(x[ind == 0], x[ind == 1]))
}

现在,要解决这个问题,我一生都无法工作。我尝试了几种变体,例如:

##Note that pros.dat = my dataframe

lapply(pros.dat, FUN = function(df){
  return(apply(pros.dat[,-5], MARGIN = 2, 
      FUN = t.test.by.ind, ind = pros.dat[,5]))
})

##Note that pros.dat = my dataframe

lapply(pros.dat, FUN = function(df){
  return(apply(df[,-5], MARGIN = 2, 
      FUN = t.test.by.ind, ind = df[,5]))
})

我度过了最糟糕的时光,试图勉强工作。我可以申请工作得很好。

apply(pros.dat[,-5], MARGIN = 2, FUN = t.test.by.ind, ind = pros.dat[,5])

为什么我看不到我在做什么错?救救我,请上帝救救我。

r apply lapply
2个回答
0
投票

当您遍历data.frame时,您正在遍历其列,因此您只需应用与所应用的内容类似的内容,而没有margin参数:

pros.dat = data.frame(matrix(rnorm(100*4),ncol=4),ind=rbinom(100,1,0.5))
lapply(pros.dat[,-5],function(i)t.test.by.ind(i,pros.dat[,5]))

0
投票

lapply需要一个向量作为其参数。因此,您可以使用要分析的pros.dat列的索引:

my_columns=c(1,2,3,4) # for instance
lapply(my_columns,function(col) t.test.by.ind(x=pros.dat[,col],y=pros.dat[5]))
© www.soinside.com 2019 - 2024. All rights reserved.