【问题标题】:Combine different elements of the same list in different R workspaces在不同的 R 工作区中组合同一列表的不同元素
【发布时间】:2015-01-22 11:58:02
【问题描述】:

例如:三个 R 工作区 A.RDataB.RDataC.RData

  • A.RData:一个列表对象list.example <- list(1,2)
  • B.RData:同名列表对象list.example <- list(NULL,NULL,3)
  • C.RData: 同名列表对象list.example <- list(NULL,NULL,NULL,4)

我想在新工作区中得到一个对象list.new.example,打印为:

[[1]]
[1] 1

[[2]]
[1] 2

[[3]]  
[1] 3  

[[4]]  
[1] 4

我试过了

file.full <- list.files(directory, full.names = TRUE)
list.new.example <- list()
for (i in 1:3) {
   load(file.full[i])
list.new.example <- c(list.new.example, list.example)
}
print(list.new.example)

但这不是我想要的。 NULL 正在填满。所以谢谢。

【问题讨论】:

    标签: r list rdata


    【解决方案1】:

    这类问题可以通过在单独的环境中加载每个文件来解决。然后只需从它们中提取名为list.example 的元素并组合成一个列表即可。

    # Create the data
    setwd(tempdir())
    list.example <- list(1,2)
    save(list.example, file="A.RData")
    list.example <- list(NULL,NULL,3)
    save(list.example, file="B.RData")
    list.example <- list(NULL,NULL,NULL,4)
    save(list.example, file="C.RData")
    
    # Load
    files <- c("A.RData", "B.RData", "C.RData")
    env <- lapply(files, function(f){
        e <- new.env()
        load(f, envir=e)
        e
    })
    
    # Tidy up
    l <- lapply(env, "[[", "list.example")
    l <- unlist(l, recursive=FALSE)
    list.new.example <- l[!sapply(l, is.null)]
    

    环境属于 R 中相对较少用户熟悉的更高级的特性。然而,它们非常易于理解且非常有用,只需将它们视为无序的命名对象集,可以像普通列表一样进行操作。像这样

    env[[1]]$list.example
    env[[1]][["list.example"]]
    

    【讨论】:

    • 不客气!但是,如果您对答案感到满意,您应该点击投票箭头下方的勾号来接受它。
    • 很抱歉,我是新人。我将学习stackoverflow的规则。所以谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多