【问题标题】:Applying nested lapply functions应用嵌套的 lapply 函数
【发布时间】:2015-04-26 22:57:29
【问题描述】:

我创建以下函数的目的是应用两次 lapply 迭代。

'x' 这里将是 10 个数据帧的列表,每个数据帧的第一列作为响应变量。

首先,我应用 lapply 在这些数据帧上运行“lm”,方法是传递包含它们的列表,并将第一列指定为响应并在相应数据帧中的所有变量上运行 lm。

然后我希望在每个数据框中创建一个列,一旦应用了“lm”,该列将包含拟合值。

  runit<-function(x){
     {lapply(x,function(data){lm(reformulate(termlabels=".",
      response=names(data)[1]),data)})
     }

     {
     lapply(x,function(data){data$fitted<-fitted(data)})
     }
     }

但这不起作用。一旦运行,我会得到“null”作为输出

runit(listcontainingdataframes)
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

【问题讨论】:

    标签: r lapply


    【解决方案1】:
    #No need for two `lapply`
    x<-list(mtcars,iris)
    lapply(x,function(data){
                      data$result<-lm(reformulate(termlabels=".",response=names(data)[1]),data)$fitted
       return(data)
             }
    )
    

    【讨论】:

    • 谢谢,不幸的是,这不起作用。我收到一个错误“$&lt;-.data.frame(*tmp*, "result", value = c(-4.29725218642032, 中的错误:替换有 29 行,数据有 53"
    • 我现在已经测试了示例数据的代码。有用。可能是您的数据框有问题。
    • 是的,我正在检查是否有一个数据框出现此错误。我试图找出原因
    • 我看到生成的拟合值有 29 个,而原始数据集有 53 个,其中很多是 NA,这就是错误的原因
    • @oivemaria- 尝试在lm() 中设置na.action = na.exclude。 getOption("na.action") 的结果是什么?
    【解决方案2】:

    这行得通:

    hellow<-lapply(x,function(data){
        data$result<-fitted(lm(reformulate
     (termlabels=".",response=names(data)[1]),data,na.action="na.exclude"))
     return(data)   
    }
    )
    

    但是,现在当我使用

    list2env(hellow,.GlobalEnv)
    

    要将列表“hellow”转换为单个数据帧,我得到

        Error in list2env(hellow, .GlobalEnv) : 
      names(x) must be a character vector of the same length as x
    

    我知道列表hello没有任何名称,因此出现错误。但是如果不为列表中的每个元素分配名称,我怎么能越过它。

    感谢 Metrics 和 Richard

    【讨论】:

    • 使用setNames(hellow, paste0('dat', seq_along(hellow))命名很容易
    • 好吧,列表“x”包含数据帧,理想情况下希望它自动保留 x 中包含的数据帧的名称,但即使创建后的 x 似乎也没有保留任何名字。我尝试了 names(x),它显示为 NULL,就像 names(hellow) 一样
    • 如果您已经创建了 data.frame 对象,它必须存在于ls(pattern='...)
    • 对不起,你能澄清最后一点吗
    • 您说列表x 包含数据帧。是直接从文件中读取到列表中,即lapply(list.files(), function(x) read.csv(x, header=TRUE)),还是在全局环境中一一创建对象。
    猜你喜欢
    • 2019-11-27
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多