将名称保存在环境中的对象列表保存在R中

时间:2017-03-15 11:27:18

标签: r list dataframe

我正面临着R的问题。根据性别,收集时刻,家庭等,我在我的大物种表的一系列子集之后创建了一定数量的数据帧......我将它们保存为.csv我的数据集/ csv /目录中的文件,你可以想象它会变得非常混乱。所以我想将这些数据帧保存为一个列表,在将其保存为r对象后,我可以在单独的RMarkdown文件中进行分析时加载为唯一对象。这将避免在装载的.csv文件中的错误,我惹毛了搜索,并在/ CSV目录中加载正确的文件。

因此。删除无用的对象后,我遇到这样的情况(有更多的数据帧)。

my_list <- replicate(n = 10, expr = {data.frame(x = rnorm(50), y = rnorm(50))}, simplify = F)

names(my_list) <- c(paste("ciao", c(1:10)))
list2env(my_list ,.GlobalEnv)

显然,数据帧的名称不仅仅是ciao 1,2等......而是彼此不同。 现在我想&#34;回来&#34;列出并命名每个对象的名称,如

my_list2 <- list()
for (i in seq_along(ls())) {
  my_data[["The name of i-th object"]] <- list="i-th object"
}

在这里我遇到了问题。如何根据我从seq_along获得的位置使用ls()调用第i个对象的名称? 我在帮助页面以及本网站和其他网站上搜索过,但我一无所获。

非常感谢你。 西蒙。

1 个答案:

答案 0 :(得分:3)

以下是一些方法:

1)mget

my_list2 <- mget(ls())

或可能:

my_list2 <- mget(ls(), .GlobalEnv)

2)eapply

my_list2 <- eapply(.GlobalEnv, identity)

3)获取从性能角度来看,不推荐逐步扩展列表,但如果对象很少,则无关紧要。可以使用get(nm, .GlobalEnv)而不仅仅是get(nm)

nms <- ls()
my_list2 <- list()
for(nm in nms) my_list2[[nm]] <- get(nm)

3a)与(3)类似,但使用数字索引:

nms <- ls()
my_list2 <- list()
for(i in seq_along(nms)) my_list2[[nms[i]]] <- get(nms[i])

3b)也使用get但没有for循环:

Map(get, ls())

3c)明确指定环境:

sapply(ls(), get, .GlobalEnv, simplify = FALSE)

注意:请注意,如果它们来自文件,您可以考虑使用read.tableread.csv将其直接读入列表:

sapply(list.files(), read.csv, simplify = FALSE)