2015-03-06 2 views
1

Я написал код, чтобы облегчить выполнение дискриминантного анализа с использованием функции lda. Но на самом деле у меня есть шаг, который я не могу решить. И именно тогда я должен ввести название категориального столбца в коде. Представьте себе, что у нас есть следующая таблица (называемая дымом), в которой столбец Factor представляет группы (в нашем случае курильщик и nsmok).Дискриминантный анализ и имя столбца в коде

smoke 

    Factor Lung Heart Blood 
    1 smoker 7  22  15 
    2 smoker 8  21  12 
    3 nsmok 22  9  5 

Это код, который я готовлю. Пожалуйста, посмотрите на код XXXX в коде (он появляется дважды). Я хочу, чтобы они автоматически записывали имя категориального столбца, вместо того, чтобы писать его дважды.

lda=lda(XXXX~.,data=Smoke) 
plot(lda) 
lda 
lda$counts 
lda$svd 
lda.p=predict(lda) 
Tabla=table(Smoke$XXXX,lda.p$class) 
Tabla 
diag(prop.table(Tabla, 1)) 
sum(diag(prop.table(Tabla))) 

Я думал, что писать ...

colnames(Table)[1] 

... будет решить. Но на самом деле все еще существуют некоторые ошибки при запуске кода. В противном случае, я хоть что введение непосредственно название таким образом:

Column_Factor-> Factor 

и писать Column_Factor в двух местах в коде будет решить. Но это не так.

Любые идеи?

ответ

1

Вы могли бы сделать что-то вроде этого:

library(MASS) 

#gets the column name of the factor, maybe check if there is only one factor column first 
Column_Factor <- names(Smoke)[sapply(Smoke, class)=="factor"] 

#creates the formula by pasting the name and the RHS 
lda <- lda(as.formula(paste(Column_Factor,"~.",sep="")),data=Smoke) 

plot(lda) 
lda 
lda$counts 
lda$svd 
lda.p=predict(lda) 

#selects the column using the variable 
Tabla=table(Smoke[,Column_Factor],lda.p$class) 
Tabla 
diag(prop.table(Tabla, 1)) 
sum(diag(prop.table(Tabla))) 
+0

Совершенная NICE. Я понял! Однако мне пришлось исправить одну ошибку в вашем коде: первый Column_factor должен быть двумя словами с заглавной буквой (Column_Factor). Не могли бы вы исправить это? – antecessor

+1

Спасибо, что поймал, что я его отредактировал – NicE

Смежные вопросы