【问题标题】:Paste a string of variable names into function in R将一串变量名粘贴到R中的函数中
【发布时间】:2017-04-04 21:33:49
【问题描述】:

我有两个变量名字符串,看起来像这样

> 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 对。为此,我尝试将变量名称正确粘贴到函数 rbind 中,然后粘贴到 expand.grid

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

我的意思是我尝试使用rbind 将所有a0a6 向量折叠成一个向量,让它命名为a,所有b 的向量都相同,然后找到所有对ab 中的值

令人惊讶的是,没有任何效果。可以修吗?

【问题讨论】:

  • 你能发布一个期望输出的例子吗?
  • 不好意思这个乱七八糟的问题,好像太复杂了。这部分代码是从创建这些向量 a 和 b 的函数中提取的

标签: r vector rbind


【解决方案1】:

这样的?

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

【讨论】:

    【解决方案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 的折叠中

    【讨论】:

    • 我无法让它与 vapply 一起使用,但 unlist(lapply(paste0("b",0:6),function(x) get(x))) 也可以使用
    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多