我正面临着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个对象的名称? 我在帮助页面以及本网站和其他网站上搜索过,但我一无所获。
非常感谢你。 西蒙。
答案 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.table
或read.csv
将其直接读入列表:
sapply(list.files(), read.csv, simplify = FALSE)