将evalparse与多个元素向量一起使用

问题描述

我正在尝试从字符向量中eval(parse())变量名称,但是eval()仅返回最后一个变量的内容: 我的代码

c <- c(1,1)
a <- c(1,0)
t <- c(0,1)
g <- c(0,0)

sequence <- c("a","t","g","a","c")
eval(parse(text=sequence))

它应该返回:

[1] 1 0 0 1 0 0 0 1 0 0 0 1 1 0 1 1

但是它只是将对应的返回到向量的最后一个元素:“ c”

[1] 1 1

解决方法

我们可以使用mget来获取list中的所有对象值,然后使用unlist list来创建vector

unlist(mget(sequence),use.names = FALSE)
#[1] 1 0 0 1 0 0 0 1 0 0 0 1 1 0 1 1

对于eval(parse,它需要length为1。我们可以遍历sequence并进行eval(不推荐)

c(sapply(sequence,function(x) eval(parse(text = x))))
#[1] 1 0 0 1 0 0 0 1 0 0 0 1 1 0 1 1
,

我意识到我可以做到:

bin <- NULL
for(n in 1:length(sequence)) {
  bin <- append(bin,eval(parse(text=sequence[n])))
  }

但是我想知道是否有没有for循环的简便方法。