gpt4 book ai didi

rpart 在函数内部使用时查找变量有问题

转载 作者:行者123 更新时间:2023-12-03 20:23:17 26 4
gpt4 key购买 nike

我有以下问题。我编写了一个函数,在该函数中使用 rpart 包一次性计算分类树。

在函数内部,我初始化了树的权重。但是,我收到一个错误,即 rpart 函数找不到权重变量(这是确切的错误消息: Error in eval(expr, envir, enclos) : object 'w' not found )。

当我在函数外运行我的代码时,它工作得很好。最后,您可以找到一个关于我的问题的小玩具示例。我真的不明白这是怎么回事。会不会,那个rpart是在全局环境中寻找变量?

我的问题的玩具示例:

# Load Package
library(rpart)

# Create simple wrapper function for rpart
example <- function( form, data ){
N <- nrow( data )
w <- rep( 1/N , N )
tree <- rpart( form , data = data, weights = w )
return( tree )
}

# Get adjust and data set / define model
df <- mtcars
df$mpg <- as.factor( ifelse( df$mpg < 15 , 1 , 0 ) )
model <- formula( mpg ~ . )

# Run function - THIS PRODUCES AND ERROR
test <- example( model, df )

# Re-run the same outisde the function - THIS WORKS
N <- nrow( df )
w <- rep( 1/N , N )
rpart( model , data = df, weights = w )

最佳答案

其实rpart()在公式指定的环境中查找变量。 R 中的公式实际上包含对创建(定义)环境的引用。由于您在全局环境中创建了公式,因此会在那里搜索您的变量(如果在 data.frame 中未找到)。如果你愿意,你可以改变环境

example <- function( form, data ){
environment(form)<-environment()
N <- nrow( data )
w <- rep( 1/N , N )
tree <- rpart( form , data = data, weights = w )
return( tree )
}

但是混合来自环境和 data.frames 的变量可能会变得棘手,所以要小心。

关于rpart 在函数内部使用时查找变量有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797816/

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