【问题标题】:trouble getting Lapply with on-the-fly function to run correctly使用即时功能无法正确运行 Lapply
【发布时间】:2020-05-09 22:20:31
【问题描述】:

我正在尝试使用基于第 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]))
})

我在尝试让 lapply 上班时遇到了最糟糕的情况。我可以让应用正常工作。

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

为什么我看不到我做错了什么?

【问题讨论】:

  • 我在lapply,你在哪里用df你可能需要lapply(pro.dat[-5], function(df) t.test.by.ind(df, ind = pros.dat[,5]))
  • 这很好用。非常感谢你一如既往的阿克伦!!

标签: r apply lapply


【解决方案1】:

当您通过 data.frame 进行 lapply 时,您正在遍历其列,因此您只需应用类似于您在 apply 中的内容,而不使用 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]))

【讨论】:

  • 评论很有帮助。谢谢你。函数语法 FUN = function(df) 和 arguments 改变了游戏规则。
【解决方案2】:

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]))

【讨论】:

  • 狼打败了你几分钟。不过还是非常感谢。我现在看到函数 (arg1, arg2) 是我搞砸了。
猜你喜欢
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
相关资源
最近更新 更多