2015-07-06 1 views
0

У меня есть строка, которую я хочу вставить в R, которая содержит запятую (как показано ниже): как мне ее избежать?Использование пасты в R, включая запятую

variable <-"string" 

Команда 1:

lm(paste(variable," ~ ., DATA",sep="")) 

Сообщение об ошибке 1:

Error in parse(text = x) : <text>:1:9: unexpected ',' 

Command 2:

lm(paste(variable," ~ .\, DATA",sep="")) 

Сообщение об ошибке 2:

Error: '\,' is an unrecognized escape in character string starting "" ~ .\," 

Желаемый результат:

lm(string ~ ., DATA) 

Я понимаю, почему я получаю сообщения об ошибках, но я не могу работать, как напечатать запятую с помощью пасты.

EDIT: Согласитесь, что паста работает отлично, находится внутри lm(), это вызывает проблемы?

+2

, установив 'переменная' как строку' string', ваш код работает хорошо и не вызывает никаких ошибок для меня. Может быть, вы должны указать, что такое «переменная», может быть, проблема такова. – SabDeM

+1

Первый работает для меня. Я использую 'R 3.2.1' – akrun

+0

Первые работы для меня тоже. Пожалуйста, покажите образец того, что такое 'variable'. –

ответ

2

Ваша проблема не в пасте. Он находится в lm. В формуле не ожидается запятая, поэтому, когда она идет, чтобы преобразовать вашу вставную строку (которая работает правильно, вытащите ее из lm, и вы увидите это) в формулу, которую вы видите на ней.

Кроме того, учитывая то, что вы ожидаете, это не правильный путь. Если вы хотите выполнить метапрограммирование в этом случае, как это, вы должны построить целую команду (то есть lm(string ~ ., DATA)) в виде строки, а затем использовать eval и parse. Все это говорит о том, что это абсолютно ужасная парадигма программирования. Просто постройте вызов функции как обычно или, по крайней мере, используйте do.call.

+0

Как вы могли угадать из факта, что я задаю этот вопрос, я далек от эксперта по R, так что вы могли бы объяснить, почему это «ужасная парадигма программирования», пожалуйста? – Joni

0

Я просто хотел, чтобы второй комментарий nicola выше в разделе редактирования, и предупреждение iShouldUseAName о формуле. Например, ниже работает, и я думаю, что это близко к тому, что вы делали.

X <- 1:5 
Y <- 2:6 
Z <- 3:7 
variable <- "X" 
data <- as.data.frame(cbind(X, Y, Z)) 
lm(paste(variable," ~ Z",sep=""),data) 

Итак, если вы хотите, чтобы петли лм через несколько переменных (которые, как я пытался использовать «вставить» в прошлом), вы могли бы сделать что-то вроде ниже. Извините, если это не так, как вы это делали:

for (C in c("X","Y")) { 
    out <- lm(paste(C," ~ Z",sep=""),data) 
    print(out) 
}