Подготовка данных с помощью dplyr дает: NA, введенные путем принуждения - PullRequest
0 голосов
/ 19 марта 2020

Я слежу за книгой по построению деревьев решений и подумал, что смогу сделать кусок кода немного красивее. Это рассматриваемый код:

library(tree)
library(ISLR)
library(dplyr)

attach(Carseats)

High=ifelse(Sales <=8,"No","Yes ")
Carseats =data.frame(Carseats ,High)
tree.carseats <- tree(High~ . -Sales, Carseats)

Что делает код, так это добавляет столбец во фрейм данных Carseats перед созданием древовидной структуры.

Код, который я считал более красивым читать это:

library(tree)
library(ISLR)
library(dplyr)

Carseats <- Carseats %>% mutate(High = ifelse(Sales <= 8, "No", "Yes"))
tree.carseats <- tree(High~ . -Sales, Carseats)

Однако попытка запустить последнюю строку с измененным кодом выдает предупреждение:

Warning message:
In tree(High ~ . - Sales, Carseats) : NAs introduced by coercion

Когда я пытаюсь сделать сводку tree.carseats, это выдает ошибку с измененным кодом:

Error in y - frame$yval[object$where] : 
  non-numeric argument to binary operator

Что не так с моим мыслительным процессом здесь?

1 Ответ

1 голос
/ 19 марта 2020

Не знаю, где возникла проблема, но она решается, если вы вызываете factor по результату if_else ...

В общем случае attach данные не рекомендуется напрямую , это может привести к непредсказуемому поведению.

library(tree)
library(ISLR)
library(dplyr)

data("Carseats")

Carseats <- Carseats %>% mutate(High = factor(if_else(Sales <= 8, "No", "Yes")))

tree.carseats <- tree(High~ . -Sales, data = Carseats)
...