#r #decision-tree
#r #дерево решений
Вопрос:
Я пытаюсь построить дерево на основе некоторых данных о раке предстательной железы.
> head(prostate)
# A tibble: 6 x 6
lcavol age lbph lcp gleason lpsa
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 -0.580 50 -1.39 -1.39 6 -0.431
2 -0.994 58 -1.39 -1.39 6 -0.163
3 -0.511 74 -1.39 -1.39 7 -0.163
4 -1.20 58 -1.39 -1.39 6 -0.163
5 0.751 62 -1.39 -1.39 6 0.372
6 -1.05 50 -1.39 -1.39 6 0.765
Я объявил все необходимые пакеты и начал строить свое дерево.
> library(tree)
> pstree <- tree(lcavol ~., data=prostate, mindev=0.1, mincut=1)
> pstree <- tree(lcavol ~., data=prostate, mincut=1)
Команды выполняются без проблем. Однако, когда я пытаюсь распечатать свое дерево, я сталкиваюсь с ошибкой.
> pstree
Error in cat(x, ..., sep = sep) :
argument 1 (type 'list') cannot be handled by 'cat'
Когда я изучаю структуру ‘prostate’, она показывает, что это фрейм данных.
> str(prostate)
tibble [97 x 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
Более странной частью может быть то, что когда я строю дерево, я получаю свои графики, как если бы работала предыдущая команда
plot(pstree, col=8)
text(pstree, digits=2)
Когда я загружал пакет ‘tree’, мне пришлось обновить свой R, поскольку я запускал более старую версию. Возможно, из-за этого я сталкиваюсь с ошибкой? Вот версия R, которую я запускаю
> version
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 4
minor 0.3
year 2020
month 10
day 10
svn rev 79318
language R
version.string R version 4.0.3 (2020-10-10)
nickname Bunny-Wunnies Freak Out
Я понимаю, что cat является частью базового пакета, поэтому я не уверен, почему это может вызвать проблемы. Возможно, есть какой-то другой пакет, который был удален в обновлении, вызвавшем эту проблему? Я установил и загрузил пакет «Cat» в случае, но это не решило проблему.
Также обратите внимание, что этот код предназначен для класса интеллектуального анализа данных, который я в настоящее время использую. Код и сопроводительный текст взяты из книги Йоханнеса Ледолтера «Интеллектуальный анализ данных и бизнес-аналитика с R. Вы можете увидеть полный код для главы 13 здесь и данные здесь . Большое вам спасибо за ваше время, мысли и помощь!
Приветствия, Крис
Ответ №1:
Я столкнулся с той же проблемой и не нашел никакой другой поддержки для этого в Интернете. Я понял, что получаю эту ошибку, когда tidyverse
tree
оба пакета и загружаются одновременно. Выгрузка tidyverse
решила проблему для меня.
Примечание: вот версии, которые я использую. Я убедился, что использую последние версии.
- R Studio: 1.3.1093
- R: 4.0.3 (2020-10-10)
tree
пакет: 1.0.40tidyverse
пакет: 1.0.40
Комментарии:
1. Хорошо, спасибо! В итоге я использовал
rpart
пакет вместо этого и, честно говоря, предпочел его. Спасибо за комментарий, хотя!
Ответ №2:
У меня та же ошибка, что и у вас, при попытке вызвать функцию печати класса tree.
>tree_OJ
Error in cat(x, ..., sep = sep) :
argument 1 (type 'list') cannot be handled by 'cat'
Ошибка вызвана загрузкой пакета «cli», который загружается неявно при загрузке «tidyverse». Пакет «cli» запутывает пространство имен и перезаписывает функцию печати для класса tree.
Registered S3 method overwritten by 'cli':
method from
print.tree tree
Если вам нужно использовать пакет «tidyverse»,
вы можете использовать следующий код, который явно вызывает функцию печати, используемую для класса tree. Не забудьте использовать «:::» вместо обычно используемого «::», потому что функция print.tree не является открытой функцией в пакете дерева.
tree:::print.tree(tree_OJ)