【问题标题】:rpart formula parameter usage: "NAs are not allowed in subscripted assignments"rpart 公式参数用法:“下标赋值中不允许使用 NA”
【发布时间】:2016-07-08 12:18:47
【问题描述】:

在简单的线性回归中,有一个数据框,我们可以用它来更容易地编写公式,例如:

lm(my_dep_var ~ .-var1, data=my_df)

将返回带有除var1 之外的变量的模型作为我们模型中的独立变量。
但是,当我尝试在rpart 函数中使用相同的公式时,它似乎有一个错误:

> tree1 <- rpart(Reverse ~ .-Circuit, data=train[a], method="class", minbucket=25)
Error in rpart(Reverse ~ . - Circuit, data = train[a], method = "class",  : 
  NAs are not allowed in subscripted assignments
> 

我没有 NA 是我的数据,没有减号的 rpart 命令(但带有点:Reverse ~ .)似乎运行良好。所以看来我不能在rpart 公式中使用减号。 真的是这样吗?我在哪里可以阅读文档中的此类内容?

编辑:这是一个产生这种错误的简化代码:

var1 <- as.factor(c(1,1,1,0,1))
var2 <- c(0,0,0,0,0)
var3 <- factor(c("2", "9", "5", "5", "5"), levels=c("2","3","4","5","8","9"))
var4 <- factor(c("EA", "EA", "EA", "EA", "JP"), levels=c("EA", "CR", "CA", "JP"))
dtf <- data.frame(var1, var2, var3, var4)
rpart(var1 ~.-var4 ,data=dtf, method="class", minbucket=25)

【问题讨论】:

    标签: r rpart


    【解决方案1】:

    编辑:新代码。

    我认为问题出在字符/因素变量上。为了解决这个问题,我不得不创建一个带有虚拟变量的数据框。

    # Sample size
    N <- 10000
    
    # Creating the df
    var1 <- sample(c(0,1),N,replace = T)
    var2 <- sample(c(0),N,replace = T)
    var3 <- as.factor(sample(c("2", "9", "5", "5", "5"),N,replace = T))
    var4 <- as.factor(sample(c("EA", "EA", "EA", "EA", "JP"),N,replace = T))
    dtf <- data.frame(var1, var2, var3, var4)
    
    # Loading the package
    require(rpart)
    require(caret)
    
    # Hot Enconding - Creating dummy variables
    dummies <- dummyVars(~ ., data = dtf)
    dtf2 <- as.data.frame(predict(dummies, newdata = dtf))
    
    # Fitting the model
    fit <- rpart(var1 ~. - var4.EA,data=dtf2, method="class", minbucket=25)
    

    希望能解决你的问题。

    【讨论】:

    • 谢谢。我会在几个小时内完成...请继续关注。我将提供 head、str 和 summary 的输出。还有什么你认为有用的吗?
    • 尝试创建像df
    • 查看我编辑的帖子。我创建了生成此错误的简化 df。我注意到 -var2 而不是 -var4 没有发生错误。如果您可以追踪导致错误的原因,请告诉我。
    • 好的,谢谢。我可以通过其他方式解决这个问题。我对为什么会发生这种情况的问题更感兴趣,我在哪里可以阅读文档中的这种行为。我只是不明白为什么 var2+var3 的处理方式与 . -var4.. 以及究竟是什么导致了错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2017-05-26
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多