【问题标题】:issues with lapply; subscript out of bounds (and can't figure out where the issue is)lapply 的问题;下标越界(并且无法弄清楚问题出在哪里)
【发布时间】:2019-05-29 20:14:37
【问题描述】:

谁能帮忙!

我正在尝试使用 lapply 在一个大列表中循环 lstrends(),但我收到了错误并且想不出修复方法

错误:

“数据错误[[var]]:下标越界”

代码:

    ## Test data 
  Tissue=c("Normal","Normal","Normal","Normal","Tumor","Tumor","Tumor","Tumor")
    GeneY = c(34,12,11,8,53,32,39,80)
    GeneZ = c(4,7,3,9,44,32,56,77)
    GeneX = c(42,54,59,22,35,12,22,40)
    dvList <- c("GeneY", "GeneZ")
    breast = data.frame(Tissue, GeneX,GeneY,GeneZ)

    ## linear regression lapply works fine
    model = lapply(dvList, function(x) {
        lm(substitute(i~GeneX*Tissue, list(i = as.name(x))), data = breast)})
    library(lsmeans)

    ## selecting individual components of the list works fine
    m.lst = as.data.frame(lstrends(model[[2]], "Tissue", var="GeneX"))

    ## lapply for lstrends doesn't work for me
    m.lst = lapply(model, function(x) {
       as.data.frame(lstrends(model, "Tissue", var="GeneX"))})

【问题讨论】:

  • 看看substitute(i~GeneX*Tissue, list(i = as.name(dvList[[1]])))。您将 GeneX 作为独立变量和因变量包括在内。 lm公式看到这个就掉GeneX,然后lstrends函数在模型2的变量中找不到GeneX
  • 为什么选择列表中的单个组件仍然有效?即model[[2]] ...你有什么建议可以让lstrends(model[[2]], "Tissue", var="GeneX")函数在整个列表中循环吗?
  • 我今天早上更改了代码以删除lm() 中的GeneX~GeneX*Tissue ...不幸的是在lstrends() 中收到相同的错误消息:(
  • 基本上,我需要做的就是成功地将以下代码循环到列表as.data.frame(lstrends(model, "Tissue", var="GeneX"))中的所有元素,以获得数据框列表或一个绑定数据框

标签: r apply lapply sapply


【解决方案1】:

小错字:

m.lst = lapply(model, function(x) {
  as.data.frame(lstrends(x, "Tissue", var="GeneX"))})

感谢 reddit 用户可疑的花园

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多