带有`[`子集的removeSource()在空j参数上失败

时间:2014-08-30 08:01:52

标签: r

这是removeSource() returning error on internal package function的后续行动。

在该问题中,有人指出,当函数使用removeSource()子集时,[可能存在错误。我想专注于这个问题,所以我在这里写了一个新问题。

j中的[参数为空时,removeSource()会失败。

以下是一个例子。

foo <- function(x) { x[1, ] }
removeSource(foo)
# Error in recurse(part[[i]]) : argument "part" is missing, with no default
bar <- function(x) { x[1, seq_along(x)] }
removeSource(bar)
# function (x) 
# {
#     x[1, seq_along(x)]
# }
我不愿意把它称为错误,所以我首先会问这是否故意这样做?另外,假设我将包中的foo()函数提交给CRAN。它会通过测试吗?

更新

  1. 2014年9月1日:错误报告已提交https://bugs.r-project.org/bugzilla/show_bug.cgi?id=15957

  2. 2014年9月21日:这确实是一个错误,根据已确认的错误报告&#34;很快将在R-devel和R-patched中修复。&#34;

  3. 版本R 3.1.2

    中的
  4. 已修复

1 个答案:

答案 0 :(得分:1)

我说这是一个错误。尽管如此,这里没有任何迹象:

https://bugs.r-project.org/bugzilla3/buglist.cgi?quicksearch=removeSource

有趣的是,一旦尝试通过制作本地副本来调试函数,就会出现不同的错误。

> dput(removeSource,file="rs.tmp.R")
> rs = dget("rs.tmp.R")

rs现在是removeSource的副本,但不在utils包的环境中。

> foo = function(x){x[1,]}
> rs(foo)
Error in `attr<-`(`*tmp*`, "srcref", value = NULL) : '*tmp*' is missing
> removeSource(foo)
Error in recurse(part[[i]]) : argument "part" is missing, with no default

rs可以在函数上正常工作而不会丢失subs:

> bar = function(x){x[1]}
> rs(bar)
function (x) 
{
    x[1]
}

如果你想要一个非常小的失败例子,你不需要任何下标或逗号:

> foo = function(x){x[]}
> removeSource(foo)
Error in recurse(part[[i]]) : argument "part" is missing, with no default

我怀疑这会触发任何CRAN标志,因为下标中的尺寸可能会出现在当前90%的包中......

建议您在错误跟踪器上报告,或在R-devel邮件列表上询问。