构建 R 包的问题(由强制引入的 NA)

Problems building an R package (NAs introduced by coercion)

我已经使用 shell 编写了 Boggler package which includes a Play.Boggle() function that calls, on line 87, a progress bar 脚本:

shell(cmd = sprintf('Rscript.exe R/progress_bar.R "%i"', time.limit + 1), wait=FALSE)

当单独获取文件然后调用主 Play.Boggle() 函数时一切正常,但是当我尝试 check/build 包时(在 Win7-64 下使用 RStudio),我遇到了失败消息 -- 这是 00install.out 报告的内容:

** preparing package for lazy loading
Warning in eval(expr, envir, enclos) : NAs introduced by coercion
Error in time.limit:0 : NA/NaN argument

为了确保参数“%i”(time.limit + 1)被正确传递给 progress_bar.R,我在脚本中添加了一个 cat(time.limit)(将其余部分注释掉)以确保包构建时没有任何错误)并将其输出定向到这样的日志文件:

'Rscript.exe R/progress_bar.R "%i" > out.log'

结论:时限确实如期而至。所以我不明白为什么会收到此 "NA/NaN argument" 错误消息。它一定与延迟加载有关,这个概念我还没有完全理解。

所以我的问题是:我该怎么做才能成功 check/build 这个包的全部功能(包括 progress_bar.R)?

注意:在 github 上,存在 progress_bar.R 脚本,但其所有内容都被注释掉,以便可以成功安装软件包。 shell(...) 函数调用仍处于活动状态,除了执行空脚本外什么都不做。

因此,在尝试构建或检查时会出现问题,在这种情况下,所有 R 脚本都会被执行,正如 Roland 所指出的那样。一个简单的解决方法可以让包 check/build 没有任何问题。修复只是在尝试恢复 commandargs(第 10-11 行)后向 progress_bar.R 添加以下行:

if(time.limit %in% c(NA, NaN))
  time.limit <- 10 # or any minimal number

当然还有其他方法可以解决这个问题。但这是一款为娱乐而编程的游戏,我很乐意使用该补丁。希望这对以后的人有所帮助,我不会为了那个赏金而白白浪费 50 个宝贵的声望点数! :D