【问题标题】:Undefined columns error when using lapply使用 lapply 时出现未定义列错误
【发布时间】:2019-02-19 12:38:38
【问题描述】:

为什么这行得通而不是 lapply?

使用内置的基础 R ChickWeight 数据:

names(ChickWeight)<-tolower(names(ChickWeight)) 

如果我只想要 1 列“时间”的一个相关性,这可行:

library(reshape)
cor(cast(melt(ChickWeight[,c("time","diet","chick")],id.vars=c("chick","diet")),chick~diet))

当我尝试将相同的东西应用于“时间”和“重量”时,情况并非如此,即第 1:2 列:

lapply(as.list(ChickWeight[,c(1:2)]), FUN=function(i){
cor(cast(melt(ChickWeight[,c(i,"diet","chick")], id.vars=c("chick","diet")),chick~diet))
})

因此,函数部分本身可以正常工作的事实让我觉得像这样使用lapply 有一些我不明白的地方。我收到此错误:

Error in `[.data.frame`(ChickWeight, , c(i, "diet", "chick")) : 
  undefined columns selected 

【问题讨论】:

  • 错误来自 c(i, "diet", "chick")。你想在这里做什么?您正在尝试按 ChickWeight$weight 列中的值以及“饮食”和“小鸡”中的值进行索引,这显然没有意义。

标签: r lapply


【解决方案1】:

啊,我明白你现在在这里做什么了。

替换:

lapply(as.list(ChickWeight[,c(1:2)]), .........

lapply(names(ChickWeight)[1:2], .............

当您想要的是列名时,您正在传递列值。

【讨论】:

  • 1:2 之所以有效,是因为它在名称列表中,而不是小鸡本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2014-11-21
  • 2021-06-03
  • 2013-11-03
  • 1970-01-01
相关资源
最近更新 更多