如何根据字符串匹配(在名称中)合并到先前定义的对象列表中?

时间:2018-08-04 15:00:44

标签: r

我正在尝试将数字或向量合并到列表中

 vector1<- c(0:9)
 vector2<- c(10:19)
 vector3<- c(20:29)
 vector4<- c(30:39)

理想情况下,我希望能够从环境中定义的所有对象中选择名称与vector相匹配的对象。 我当时在想些事情,但我不知道如何继续:

 library(stringr)
 files<-ls()
 str_subset(files, "vector")

我得到了正确名称的列表,但是此向量是字符。我需要获取一个包含vector1, vector2, vector3, vector4的列表 有什么建议吗? 非常感谢

2 个答案:

答案 0 :(得分:3)

这将创建一个列表。 .GlobalEnv已明确显示,但如果感兴趣的环境是默认环境,则可以将其省略,即编写mget(ls(pattern = "^vector"))就足够了。如果要确保只获取vector形式的名称,后跟数字,请使用^vector\\d+$作为正则表达式。

vector1 <- vector2 <- vector3 <- 1:4

mget(ls(pattern = "^vector", envir = .GlobalEnv), .GlobalEnv)

提供此列表:

$`vector1`
[1] 1 2 3 4

$vector2
[1] 1 2 3 4

$vector3
[1] 1 2 3 4

答案 1 :(得分:0)

这是使用parseevallapply的一种选择。如果需要,可以使用str_subset代替grep

files <- ls()

vecs <- grep("vector", files, value = TRUE)

lapply(vecs, function(x) eval(parse(text = x)))
# [[1]]
# [1] 0 1 2 3 4 5 6 7 8 9
# 
# [[2]]
# [1] 10 11 12 13 14 15 16 17 18 19
# 
# [[3]]
# [1] 20 21 22 23 24 25 26 27 28 29
# 
# [[4]]
# [1] 30 31 32 33 34 35 36 37 38 39