Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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_Scope - Fatal编程技术网

R 内部函数从外部函数提取调用并导致错误

R 内部函数从外部函数提取调用并导致错误,r,scope,R,Scope,我正在使用库中的一个函数在另一个函数中跳跃。所讨论的leaps函数的最后两行是: rval$call <- sys.call(sys.parent()) rval 因此,best$call将包含对外部函数(test)的调用,而不是对内部(regsubsets)函数的调用。因为改变内部函数并不是一个真正的选择,有没有办法避免这个问题 编辑: 解决问题的一种方法可能是: test <- function(dependent, data){ thecall <- 'regsu

我正在使用库中的一个函数在另一个函数中跳跃。所讨论的leaps函数的最后两行是:

rval$call <- sys.call(sys.parent())
rval
因此,
best$call
将包含对外部函数(
test
)的调用,而不是对内部(
regsubsets
)函数的调用。因为改变内部函数并不是一个真正的选择,有没有办法避免这个问题

编辑:

解决问题的一种方法可能是:

test <-  function(dependent, data){
  thecall <- 'regsubsets(as.formula(paste0(dependent, " ~ .")), data = data, nvmax = 2)'
  best.fit <- eval(parse(text = thecall))
  #best.fit$call <- [some transformation of thecall
  return(best.fit)
}

test我还不完全清楚如何使用它,但是对于
test
函数,您可以编写以下代码:

test = function (dependent, data) {
    regsubsets_call = bquote(regsubsets(.(as.formula(paste0(dependent, " ~ ."))),
                                        data = .(substitute(data)), nvmax = 2))
    best_fit = eval(regsubsets_call)
    best_fit$call = regsubsets_call
    best_fit
}
但是,结果可能无法与包提供的下游函数一起工作(尽管实际上,它可能会工作;我猜
summary.regsubsets
仅使用它打印调用)

这是怎么回事?
bquote
构造一个未赋值的R表达式;它类似于
quote
,但允许您插入值(类似于
substitute
substitute(data)
意味着,不是将实际的
data.frame
放入调用中(这将导致非常笨拙的输出),而是将用户传递给
test的变量名(或表达式)
。因此,如果用户将其称为
test('mpg',mtcars)
,则生成的表达式将是

regsubsets(mpg ~ ., data = mtcars, nvmax = 2)    
然后,(a)通过
eval
对生成的调用对象进行评估,(b)存储在生成的
$call

顺便说一句,公式可以(而且,就我而言,应该)以相同的方式构造;无需解析字符串:

as.formula(bquote(.(as.name(dependent)) ~ .))
综合起来,整个表达式将变成:

formula = as.formula(bquote(.(as.name(dependent)) ~ .))
regsubsets_call = bquote(regsubsets(.(formula), data = .(substitute(data)), nvmax = 2))

问题是什么?据我所知,一切都是按预期的方式进行的。问题是best$调用应该包含regsubset(As.formula(paste0(dependent,“~”),data=data,nvmax=2),而不是test(“dep”,dfk)我的观点是:是什么让你认为它应该包含一些东西而不是它包含的东西?代码对此非常明确,并且(没有看过包的代码)这不是不合理的。我并不是说它在更广泛的意义上是错误的或不合理的。我是说$call将包含不同的内容,这取决于regsubset函数是在函数内部还是外部执行的。我的代码将因此无法工作。谢谢,这确实有效。我正在使用它来获得交叉验证错误s,以评估一组独立变量的任何滞后顺序是否有助于预测集合中的任何一个因变量。因此,我手动创建了一个CV循环(来自ISLR一书),因此需要使用n个回归器从最佳函数中获得预测值。
as.formula(bquote(.(as.name(dependent)) ~ .))
formula = as.formula(bquote(.(as.name(dependent)) ~ .))
regsubsets_call = bquote(regsubsets(.(formula), data = .(substitute(data)), nvmax = 2))