我遇到了 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)
Run Code Online (Sandbox Code Playgroud)
显然,数据帧的名称不仅仅是 ciao 1、2 等......而且彼此不同。现在我想“回来”列出每个对象并用其名称命名,例如
my_list2 <- list()
for (i in seq_along(ls())) {
my_data[["The name of i-th object"]] <- list="i-th object"
}
Run Code Online (Sandbox Code Playgroud)
在这里我遇到了问题。如何根据从 seq_along 获得的位置,使用 ls() 调用第 i 个对象的名称?我在帮助页面、本网站和其他网站中进行了搜索,但一无所获。
非常感谢。西蒙娜.
以下是一些方法:
1) 管理
my_list2 <- mget(ls())
Run Code Online (Sandbox Code Playgroud)
或者可能:
my_list2 <- mget(ls(), .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)
2) 申请
my_list2 <- eapply(.GlobalEnv, identity)
Run Code Online (Sandbox Code Playgroud)
3) get 从性能角度来看,不建议增量扩展列表,但如果对象很少,则可能无关紧要。可以使用get(nm, .GlobalEnv)而不只是get(nm):
nms <- ls()
my_list2 <- list()
for(nm in nms) my_list2[[nm]] <- get(nm)
Run Code Online (Sandbox Code Playgroud)
3a)与 (3) 类似,但使用数字索引:
nms <- ls()
my_list2 <- list()
for(i in seq_along(nms)) my_list2[[nms[i]]] <- get(nms[i])
Run Code Online (Sandbox Code Playgroud)
3b)也使用 get 但没有for循环:
Map(get, ls())
Run Code Online (Sandbox Code Playgroud)
3c)明确指定环境:
sapply(ls(), get, .GlobalEnv, simplify = FALSE)
Run Code Online (Sandbox Code Playgroud)
注意read.table:请注意,如果它们来自文件,您可以考虑使用或将它们直接读取到列表中read.csv:
sapply(list.files(), read.csv, simplify = FALSE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |