gpt4 book ai didi

r - ifelse() vs attach() 创建新的数据框列

转载 作者:行者123 更新时间:2023-12-04 09:27:33 25 4
gpt4 key购买 nike

我正在尝试在将用作模型一部分的数据框中创建一个新列(使用 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

在将数据输入 tree() 之前,CarseatsHigh 列的两个版本似乎没有任何区别> 功能。

有人可以帮我理解为什么我会得到两个不同的结果吗?有没有办法使用 base ifelse()(或不使用 attach())让它工作?

最佳答案

data.frame() 函数具有选项 stringsAsFactors,默认为 stringsAsFactors = default.stringsAsFactors()default.stringsAsFactors() 的默认值为 TRUE,因此您对 data.frame() 的调用会创建 High 作为一个 factor,而 ifelse() 默认创建一个 character

就用

Carseats$High <- factor(ifelse(Carseats$Sales <= 8, "No", "Yes"))

让它在不附加数据的情况下工作。

关于r - ifelse() vs attach() 创建新的数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54141856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com