Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解R中的调用函数_R - Fatal编程技术网

理解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