Я пытаюсь использовать простую подгонку и перекрестную проверку следующим образом:

library(ISLR)
attach(Auto)

Auto$cut.values = cut(displacement,2)
fit = glm(mpg~Auto$cut.values)
cv.glm(Auto, fit, K=10)$delta[1]

Но я получаю сообщение об ошибке:

Error in model.frame.default(formula = mpg ~ Auto$cut.values, data = list( : variable 
lengths differ (found for 'Auto$cut.values')

Но если я попытаюсь немного изменить третью строку и запустить ее, то не получу ошибки и получу результат:

Auto$cut.values = cut(displacement,2)
fit = glm(mpg~cut.values, data = Auto)
cv.glm(Auto, fit, K=10)$delta[1]

Насколько мне известно, cut.values, data = Auto то же самое, что Auto$cut.values.

Какой момент мне здесь не хватает?

1
Natig Aliyev 26 Июл 2017 в 18:41
А как насчет mpg? почему тебя волнует только cut? вы также должны определить, о чем идет речь.
 – 
M--
26 Июл 2017 в 18:47
Я забыл об этом упомянуть. Но раньше я использовал attach (Auto).
 – 
Natig Aliyev
26 Июл 2017 в 18:49
3
Крайне не рекомендуется использовать attach. Это частый источник проблем. Вы можете использовать временный аналог with, и многие функции имеют аргумент данных, который будет служить той же цели.
 – 
lmo
26 Июл 2017 в 19:01
1
Спасибо @Imo. В конце концов, я думаю, что последую вашему совету и не буду так часто использовать attach.
 – 
Natig Aliyev
26 Июл 2017 в 19:06

1 ответ

Лучший ответ

Когда вы впервые attach в своем наборе данных не используете переменную с именем cut.values. Следовательно, вы не можете ссылаться на него позже.

Если вы хотите извлечь выгоду из attach, вам необходимо attach(Auto) после добавления другой переменной в ваш набор данных.

library(ISLR)
attach(Auto)

Auto$cut.values = cut(displacement,2)
attach(Auto)

fit = glm(mpg~cut.values)
cv.glm(Auto, fit, K=10)$delta[1]
2
M-- 26 Июл 2017 в 19:03