理解R中的调用函数
我从网上复制了该功能:理解R中的调用函数,r,R,我从网上复制了该功能: # function used to predict Best Subset Selection Regression predict.regsubsets = function(object, newdata, id, ...) { form = as.formula(object$call[[2]]) mat = model.matrix(form, newdata) coefi = coef(object, id = id) mat[
# function used to predict Best Subset Selection Regression
predict.regsubsets = function(object, newdata, id, ...) {
form = as.formula(object$call[[2]])
mat = model.matrix(form, newdata)
coefi = coef(object, id = id)
mat[, names(coefi)] %*% coefi
}
然而,当我尝试在另一个函数中使用上述函数时,我不断得到以下错误
library(leaps)
abc <- function(){
regfit <- regsubsets(lpsa ~.,data = XTraining, nvmax = 8)
predict.regsubsets(regfit, data = XTesting, id = 1)
}
abc()
Error in object$call[[2]] : subscript out of bounds
库(跳跃)
abc对象
可能是先前分析的输出(查看从哪个函数获得代码的位置)。行form=as.formula(objects$call[[2]])
提取用于创建对象的公式,并将其存储在form
中。在接下来的几行中,它用于创建新数据的模型矩阵,并最终用于预测新数据。罪魁祸首是这一行
form = as.formula(object$call[[2]])
这意味着object
(在您的示例regfit
中,它是传递给函数的变量)有一个名为call
的成员,该成员是至少包含两个元素的列表[[]]
是用于获取列表元素的R运算符
例如:
> a <- list(1:10, 1:5, letters[15:20])
> a[[2]]
[1] 1 2 3 4 5
> a[[3]]
[1] "o" "p" "q" "r" "s" "t"
您不应该选中?call
,而应该选中生成对象的函数的帮助,在您的例子中是regsubset
正如您从?regsubsets
或使用str(regfit)
所看到的,该函数不会返回名为call
的成员的对象
要从regsubsets
对象中获取公式,需要查看摘要的obj
成员
例如,您可以使用:
sm <- summary(regfit)
sm$obj$call
sm您的错误在函数abc
中。predict.regsubset
中的参数称为newdata
,但您将其称为data
…我相信该对象是一个fit
对象,它是由lm
类似函数返回的object$call[[2]]
返回lm
中使用的公式。您好,我已经给出了完整的代码来说明这个问题。请看。那么如何从函数中的regfit
提取公式呢?@Chinegro:更新了我的答案。看起来有点牵连,但如果有更直接的方法,我找不到。
sm <- summary(regfit)
sm$obj$call