3

我有一个 R 脚本(一个 R 管道工 API),我已部署到 EC2 实例并使用 pm2 进行管理,但我遇到了一个棘手的问题。我已经查明了错误的确切位置,并希望能更好地理解这个错误。

当我在本地机器(Mac 上的 RStudio)上运行脚本时,它可以正常工作。Rscript myrfile.R当我使用从 EC2 实例命令行运行脚本时,它会中断。

我已经指出,在 EC2 实例上破坏脚本的代码行及其错误是:

my_df <- my_df %>%
  dplyr::mutate(AwayScore = ifelse(dplyr::row_number() == 1, 0, AwayScore),
                HomeScore = ifelse(dplyr::row_number() == 1, 0, HomeScore)) 

# with the following error
<Rcpp::eval_error in mutate_impl(.data, dots): Evaluation error: argument "x" is missing, with no default.>

我 100% 确定 dplyr 已安装在 EC2 实例上,因为我的脚本始终使用它。我也 100% 确定my_df这里的数据框有 AwayScore 和 homeScore 列,而且my_df没有任何其他问题。

我只能假设这个错误是由 dplyr::row_number() 函数引起的,EC2 实例似乎无法处理该函数,尽管我对此并不肯定。

任何想法/帮助/我应该尝试/等的事情将不胜感激,谢谢!

4

2 回答 2

0

虽然我感谢您通过不需要库避免了该问题,但在某些时候您可能会发现您希望以类似的方式运行代码,其中需要加载库。

我使用 R 脚本遇到了类似的问题。我发现它找不到我安装的库。可以使用 R.exe 代替 Rscript.exe,但这会引起其他麻烦。我发现使用Rscript时的环境不包含R_LIBS_USER路径

如果将以下代码附加到 R 脚本的顶部,它应该可以工作

p <- "\directory path of local R packages"

.libPaths(c(p,.libPaths()))

将文件夹路径放在计算机上找到库的位置。这是Sys.getenv("R_LIBS_USER")在 GUI 中运行 R 时返回的路径

于 2018-09-07T23:35:23.347 回答
0

我很容易将我的代码更改为以下内容:

  if(is.na(my_df$AwayScore[1])) { my_df$AwayScore[1] = 0 }
  if(is.na(my_df$HomeScore[1])) { my_df$HomeScore[1] = 0 }

...所以我可能不会浪费太多时间来尝试调试它。

于 2018-09-07T22:08:32.813 回答