Р: Какой самый простой способ (однострочное?) Создать вектор выражений? - PullRequest
6 голосов
/ 26 ноября 2011

Есть ли способ создать вектор выражений в одну строку? Я знаю только два лайнера с уродливым циклом for:

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

1 Ответ

9 голосов
/ 26 ноября 2011
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]))

(Второй тест не пройдет тестируемых идентичных (), потому что он несет в себе наследие своей конструкции. Я думаю, что это побочные эффекты с байт-кодом, улучшение, которое появляется в версии 2.14.0 R, так что в более ранних версиях может выглядеть по-разному. Вы можете проверить это, применив к нему str (). Однако он проходит тест на применение правильных меток оси X к plot(1:7, xaxt="n"); axis(1,at=1:7, labels=...))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...