r语言 - 为什么 cv.tree() 在函数内部调用时找不到此对象?



在函数内部调用cvv .tree()时,我似乎有一个名称空间或范围问题:

library(tree)
library(ISLR)
Carseats$High = ifelse(Sales <= 8, "No", "Yes")
mytreecv = function(formula, mydata)
{
  set.seed(2)
  tree.carseats = tree(formula, mydata)
  cv.carseats = cv.tree(tree.carseats, FUN=prune.misclass)
}

当我运行mytreecv()时,我得到这个错误:

> mytreecv(High ~ . - Sales, Carseats)
Error in is.data.frame(data) (from #5) : object 'mydata' not found

cv.tree()调用model.frame(object)失败。当我从R提示符中调用每一行时,相同的函数代码可以工作。

不确定为什么会发生这种情况,但可以通过使用参数model = t创建树来修复。

mytreecv = function(formula, mydata)
{
  set.seed(2)
  tree.carseats = tree(formula, mydata, model = T)
  cv.carseats = cv.tree(tree.carseats, FUN=prune.misclass)
}

答案在这里找到:http://florence.acadiau.ca/collab/hugh_public/index.php?title=R:putting_cv.tree_inside_a_function&redirect=no

最新更新