Я пытаюсь создать новый столбец во фрейме данных, который будет использоваться как часть модели (с использованием функции tree()
).
При определении нового столбца с использованием ifelse()
, R возвращает предупреждение о том, что NA были введены путем принуждения.
library(ISLR)
library(tree)
Carseats$High <- ifelse(Carseats$Sales <= 8, "No", "Yes")
> tree.carseats <- tree(High~.-Sales, data = Carseats)
Warning message:
In tree(High ~ . - Sales, data = Carseats) : NAs introduced by coercion
> summary(tree.carseats)
Error in y - frame$yval[object$where] :
non-numeric argument to binary operator
Между тем, следующий код, использующий attach()
, похоже, работает правильно. По принуждению не вводятся NA, и tree()
работает как задумано.
library(ISLR)
library(tree)
attach(Carseats)
High <- ifelse(Sales <= 8, "No", "Yes")
Carseats <- data.frame(Carseats, High)
> tree.carseats <- tree(High~.-Sales, data = Carseats)
> summary(tree.carseats)
Classification tree:
tree(formula = High ~ . - Sales, data = Carseats)
Variables actually used in tree construction:
[1] "ShelveLoc" "Price" "Income" "CompPrice" "Population"
[6] "Advertising" "Age" "US"
Number of terminal nodes: 27
Residual mean deviance: 0.4575 = 170.7 / 373
Misclassification error rate: 0.09 = 36 / 400
Похоже, что нет никакой разницы в двух версиях столбца High
в Carseats
до подачи данных в функцию tree()
.
Может кто-нибудь помочь мне понять, почему я получаю два разных результата? Есть ли способ заставить это работать, используя base ifelse()
(или без attach()
)?