【问题标题】:R Script running successfully on local machine, not on EC2 instanceR 脚本在本地机器上成功运行,而不是在 EC2 实例上
【发布时间】:2019-02-13 04:49:34
【问题描述】:

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

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

我已经指出,在 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 实例似乎无法处理该函数,尽管我对此并不肯定。

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

【问题讨论】:

    标签: r amazon-ec2 dplyr plumber


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      p <- "\directory path of local R packages"
      
      .libPaths(c(p,.libPaths()))
      

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

      【讨论】:

      • 我认为我的 R 脚本在查找包时没有问题。它能够加载和使用我的脚本所需的所有其他库(包括其他地方的 dplyr)
      • 我认为是当您从控制台使用 Rscipt 运行脚本时。至少这对我来说是过去的问题。
      • 刚刚在我的笔记本电脑上测试了 Rscript,它似乎知道本地库路径是什么,并且能够从中加载库:所以我可能弄错了。
      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 2016-10-26
      • 2018-10-13
      相关资源
      最近更新 更多