在函数内部调用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