R:放置来自.GlobalEnv的变量,符合列表

时间:2016-04-19 19:10:01

标签: r list workspace

几周以来,我每周测量一次数据。由于测量仪器在其他地方使用过,我现在有了很多.csv - 我读入R的文件,现在我的工作区中有它们。我将它们命名为相似,以便所有data.frames包含模式" 11。"在他们的变量名称中。我知道我可以使用

获取(仅)那些变量名称的列表
ls(pattern = "11.")

但我希望list包含data.framesread.table。当然,我可以回到我的脚本中并从例如

更改A.11.01 <- read.table(...) 命令
data.list[1] <- read.table(...)

data.list[1]

稍后将列表元素data.list[1] <- .GlobalEnv[1]的名称更改为&#34; A.11.01&#34; (并且如果我立即这样做会节省很多时间)并且我非常确定我也可以在一个命令中找到如何定义和命名列表元素,但感觉如下如果有一个非常简单的选项让R根本创建这个列表。

(我尝试的另一种方法是environment,但我最终找不到将php artisan make:middleware NoUsernameMiddleware 分组的方法。(我的其他方法似乎很难被提及。)

2 个答案:

答案 0 :(得分:1)

您可以使用

mylist <- mget(ls(pattern = "11.")) 

或者,如果您想确保只使用该模式获得data.frame(而不是其他对象),则可以使用

mylist <- Filter(is.data.frame, mget(ls(pattern = "11.")))

顺便说一句,在您的情况下,使用

之类的内容直接将它们读入列表会很容易
listfiles <- list.files("path/to/folder", pattern = "\\.csv$", full.names=TRUE)
mylist <- lapply(listfiles, read.csv, stringsAsFactors = FALSE)

stringsAsFactors = FALSE只是一个示例,向您展示您可以轻松添加其他参数)

答案 1 :(得分:1)

你可以通过多种方式实现这一点,计算机时间比人类时间便宜,因此在lapply建议的文件名向量上使用docendo discimus可能更明智。

但话又说回来,很容易将.GlobalEnv转换为列表,然后使用grep对其进行子集化:

gelist <- as.list(.GlobalEnv)
# or ... as.list(environment())
gelist <- gelist[grep("^11\\.", names(gelist))]
# ^ saying that expected pattern is at the beginning of the string
# and . has a special meaning for grep, so it has to be "escaped" by \\
# see ?regexp