2016-06-07 61 views
0

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

鉴于我一个范围列表(通常多于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)} 

我如何打电话这个单独的列表按照他们的名字从一个矢量中以这种方式被识别为列表对象?

回答

4

您正在寻找get

get("ice_2000") 

但是,为什么不干脆:

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

这是更好的做法,随机存储您的结构,在列表中,而不是在内存中,然后试图抓住他们与丑陋的粘贴/字符串操作加上得到...

如果你需要纠正这种结构默认,你可以这样做:

library(magrittr) 

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

我想是因为OP不想输入所有'ice_ *'。 – Jasper

+0

是的,但最后一行代码处理这个问题。 –

+0

当创建这些对象时,将这些对象放在列表中会好得多。如果这是不可能的(不能想象为什么),你应该使用'mget'而不是'lapply'和'get'。 – Roland