【问题标题】:Unlist multiple lists in R在R中取消列出多个列表
【发布时间】:2016-10-07 12:31:35
【问题描述】:

如何一次取消列出多个列表?

给定我想要取消列出的一系列列表(通常超过 10 个):

ice_2000 = list(seq(1,5,1),seq(6,10,1),seq(11,15,1))
ice_1990 = list(seq(1,5,1),seq(6,10,1),seq(11,15,1))
ice_1980 = list(seq(1,5,1),seq(6,10,1),seq(11,15,1))

我尝试过类似的方法:

sample.yrs = c(2000,2005,2010)

nam <- paste("ice",sample.yrs, sep = "_") 

library(foreach) 


foreach(x = nam) %do% { 

temp.df <- as.data.frame(do.call("rbind",x))
assign(paste("df",x, sep="_"), temp.df )}

如何通过向量中的名称调用单个列表,以便将它们识别为列表对象?

【问题讨论】:

    标签: r list loops foreach


    【解决方案1】:

    您正在寻找get:

    get("ice_2000")
    

    但为什么不简单:

    lapply(list(ice_2000, ice_1990, ice_1980) , unlist)
    

    最好将结构存储在列表中,而不是随机存储在内存中,然后尝试使用丑陋的粘贴/字符串操作以及 get ... 来抓取它们。

    如果你需要更正这个结构默认值,你可以这样做:

    library(magrittr)
    
    good = ls(pattern="ice_*") %>% lapply(get) %>% lapply(function(u) do.call(rbind, u))
    

    【讨论】:

    • 我认为是因为 OP 不想输入所有 ice_*
    • 是的,但最后一行代码处理了这个问题。
    • 最好在创建这些对象时将它们放在一个列表中。如果这是不可能的(无法想象为什么不),您应该使用mget 而不是lapplyget
    • 而且 OP 似乎不想要 unlist 而是想要 do.call(rbind, ...)
    • 我正在处理年度文件 .bin 中的海冰数据,我将这些数据读入 R 中。每年都是 [[365]] 列表对象的列表,其中包含 [1]...[108] 值。您是否建议将它们存储为列表列表? @ColonelBeauvel 我怎么能把你的声明 good = ls(pattern="ice_*") %&gt;% lapply(get) %&gt;% lapply(unlist)do.call(rbind, ...) 一起使用?
    猜你喜欢
    • 2017-11-14
    • 2018-12-22
    • 2022-01-09
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多