这是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。它会通过测试吗?
更新
2014年9月1日:错误报告已提交https://bugs.r-project.org/bugzilla/show_bug.cgi?id=15957
2014年9月21日:这确实是一个错误,根据已确认的错误报告&#34;很快将在R-devel和R-patched中修复。&#34;
已修复 醇>
答案 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邮件列表上询问。