Как использовать переформулировать в R, когда переменные имеют встроенные пробелы - PullRequest
0 голосов
/ 20 февраля 2019

Какой правильный синтаксический анализ строки требуется для использования reformulate(), когда у терминологических меток есть встроенные пробелы?

Это работает:

reformulate(c("A", "B"), "Y")
Y ~ A + B

Все эти ошибки:

reformulate(c("A var", "B"), "Y")
reformulate(quote(c("A var", "B")), "Y")
reformulate(as.formula(quote(c("A var", "B"))), "Y")

Ожидаемые результаты:

Y ~ `A var` + B
# or 
Y ~ `A var` + `B`

ПРИМЕЧАНИЕ
Я не могу жестко закодировать обратные метки.Это часть большого блестящего приложения, поэтому, если ответом являются обратные галочки, мне нужен метод, чтобы сделать это программно.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вот несколько других способов работы с символами, а не со строками (поэтому нет необходимости в явных обратных галочках).

input <- "A var"
eval(bquote( Y ~ .(as.name(input)) + B))
# Y ~ `A var` + B

eval(substitute( Y ~ INPUT + B, list(INPUT = as.name(input))))
# Y ~ `A var` + B

library(rlang)
eval(expr(Y ~ !!sym(input) + B))
# Y ~ `A var` + B
0 голосов
/ 20 февраля 2019

Используйте обратные пометки, например,

reformulate(c("`A var`", "B"), "Y")
#Y ~ `A var` + B

Или, что еще лучше, не используйте пробелы в именах переменных.

Или с помощью вспомогательной функции

bt <- function(x) sprintf("`%s`", x)
reformulate(c(bt(var1), var2), "Y")
#Y ~ `A var` + B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...