将一串变量名称粘贴到R中的函数中

时间:2017-04-04 21:33:50

标签: r string vector rbind

我有两串变量名称,看起来像这样

> names_a = paste(paste0('a', seq(0,6,1)), collapse = ", ")
> names_a
[1] "a0, a1, a2, a3, a4, a5, a6"
> names_b = paste(paste0('b', seq(0,6,1)), collapse = ", ")
> names_b
[1] "b0, b1, b2, b3, b4, b5, b6"

每个ab变量都包含一个id向量,例如:

> head(a3)
[1] "1234" "56567" "457659"...

我的目标是获得所有可能的ab ID对。为此,我尝试粘贴变量'将rigth命名为函数rbind,然后命名为expand.grid

pairs = expand.grid(rbind(parse(text = names_a), rbind(parse(text = names_b))

我的意思是我尝试使用a0将所有a6rbind向量折叠为单个向量,将其命名为a,所有{{1}都相同然后找到ba

中的所有值对

令人惊讶的是没有任何作用。可以修复吗?

2 个答案:

答案 0 :(得分:2)

这样的东西?

a1 = 1:2
a2 = 3:4
b1 = 5:6
b2 = 7:8
expand.grid(do.call(rbind, mget(paste("a", 1:2, sep = ""))),
         do.call(rbind, mget(paste("b", 1:2, sep = ""))))
#   Var1 Var2
#1     1    5
#2     3    5
#3     2    5
#4     4    5
#5     1    7
#6     3    7
#7     2    7
#8     4    7
#9     1    6
#10    3    6
#11    2    6
#12    4    6
#13    1    8
#14    3    8
#15    2    8
#16    4    8

答案 1 :(得分:2)

将所有a0a6折叠到一个向量中:

a <- as.vector(sapply(strsplit(gsub(" ","",names_a),",")[[1]],function(x) get(x)))

(或者,如果您没有将名称作为单个字符串进行解析):

a <- as.vector(sapply(paste0("a",0:6),function(x) get(x)))

对b执行相同操作,然后

merge(a,b) #all pairs

如果任何a或b变量都有重复项,这将生成重复项,因此您可能希望将unique添加到a​​和b的折叠中