2015-04-10 4 views
3

Я в ситуации, когда у меня есть вектор, полный имен столбцов для действительно большого кадра данных.Создание формулы с использованием очень длинных строк в R

Давайте предположим: x = c("Name", "address", "Gender", ......, "class") [аппроксимативно 100 переменных]

Теперь я хотел бы создать формулу, я в конце концов, использовать для создания HoeffdingTree. Я создаю формулу с помощью:

myformula <- as.formula(paste("class ~ ", paste(x, collapse= "+"))) 

Это подбрасывает следующее сообщение об ошибке:

Error in parse(text = x) : :1:360: unexpected 'else' 1:e+spread+prayforsonni+just+want+amp+argue+blxcknicotine+mood+now+right+actually+herapatra+must+simply+suck+there+always+cookies+ever+everything+getting+nice+nigga+they+times+abu+all+alliepickl

paste часть в вышеуказанном заявлении работает нормально, но передать его в качестве аргумента as.formula бросает все виды странных проблем.

+1

Do у вас есть столбец с именем «else»? Кажется, что вы ошибаетесь: 'as.formula (paste (" class ~ ", paste (c (" или "," else "), collapse =" + ")))' Ошибка в анализе (текст = keep.source = FALSE): : 1: 13: неожиданный 'else' 1: class ~ or + else –

ответ

7

Проблема в том, что у вас есть ключевые слова R в качестве имен столбцов. else - это ключевое слово, поэтому вы не можете использовать его в качестве обычного имени.

Упрощенный пример:

s <- c("x", "else", "z") 
f <- paste("y~", paste(s, collapse="+")) 
formula(f) 
# Error in parse(text = x) : <text>:1:10: unexpected '+' 
# 1: y~ x+else+ 
#   ^

Решение, чтобы обернуть ваши слова в обратных кавычках «`», так что R будет рассматривать их как не синтаксические имена переменных.

f <- paste("y~", paste(sprintf("`%s`", s), collapse="+")) 
formula(f) 
# y ~ x + `else` + z 
2

Вы можете уменьшить свой первый (все, кроме класса) столбец набора данных

dat_small <- dat[,c("class",x)] 

, а затем использовать

myformula <- as.formula("class ~ .") 

The . средства, используя все остальные.

0

Вы можете попробовать reformulate

reformulate(setdiff(x, 'class'), response='class') 
#class ~ Name + address + Gender 

где 'х'

x <- c("Name", "address", "Gender", 'class') 

Если R ключевые слова в 'х', вы можете сделать

reformulate('.', response='class') 
    #class ~ . 
Смежные вопросы