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

时间:2015-03-06 04:19:52

标签: r shell package

我编写了Boggler包,其中包含Play.Boggle()函数,该函数在第87行使用shell调用progress bar脚本:

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

在单独获取文件然后调用主Play.Boggle()函数时一切正常,但是当我尝试检查/构建软件包时(使用RStudio在Win7-64下),我收​​到一条失败消息 - 这里和#39; s 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论证"错误信息。它必须与懒惰装载有关,这个概念我还没有完全理解。

所以我的问题是:如何成功检查/构建具有完整功能的软件包(包括progress_bar.R)?

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

1 个答案:

答案 0 :(得分:1)

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

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

还有其他方法可以解决这个问题。但这是一款有趣的游戏,我很乐意选择那个补丁。希望这可以对未来的某些人有所帮助,但我还是没有浪费50个宝贵的代表点来获得这笔赏金! :d