R:创建表达式向量的最简单方法(单线程?)是什么?

时间:2011-11-26 18:14:33

标签: r

有没有办法在一行中创建表达式向量?我只知道一个带有丑陋for循环的双线:

vexpr <- vector("expression", 7)
for(j in 1:7) vexpr[j] <- substitute(expression(italic(X[j.])), list(j.=j))[2]

2 个答案:

答案 0 :(得分:9)

as.expression( sapply(1:7, function(x) bquote(italic(X[.(x)]))) )
#-----------
# expression(italic(X[1L]), italic(X[2L]), italic(X[3L]), italic(X[4L]), 
#    italic(X[5L]), italic(X[6L]), italic(X[7L]))

identical(vexpr, as.expression( sapply(1:7, function(x) bquote(italic(X[.(x)]))) ) )
#[1] TRUE

此外:

parse(text= paste("italic(X[", 1:7, "])", sep="") )  # fewer keystrokes
#--------
# expression(italic(X[1]), italic(X[2]), italic(X[3]), italic(X[4]), 
#    italic(X[5]), italic(X[6]), italic(X[7]))

(第二个不会通过相同的()测试,因为它带有它的构造遗产。我认为这些是字节码副作用,R版本2.14.0中出现的增强,所以它在早期版本中可能会有所不同。您可以通过对它应用str()来检查它。但是,它确实通过了将适当的x轴标签应用于plot(1:7, xaxt="n"); axis(1,at=1:7, labels=...))的测试

答案 1 :(得分:0)

使用parse而不是paste0可以通过paste方法节省更多击键