Rscript 不适用于 AWS Lambda 的打包 R

标签 r aws-lambda rscript

我正在尝试使用打包的 R 二进制文件和库(无需安装)在 AWS EC2 实例的命令行上运行 R 脚本——重点是测试脚本以部署到 AWS Lambda。我关注了these instructions .这些说明用于将所有 R 二进制文件和库打包到一个 zip 文件中,并将所有内容移动到 Amazon EC2 实例以进行测试。我在新机器上解压缩所有内容,在机器上运行“sudo yum update”,并将 R 的环境变量设置为指向正确的位置:

export R_HOME=$HOME
export LD_LIBRARY_PATH=$HOME/lib

注意:$HOME 等于/home/ec2-user。

我创建了这个 hello_world.R 文件来测试:

#!/home/ec2-user/bin/Rscript
print ("Hello World!")

但是当我运行这个时:

ec2-user$ Rscript hello_world.R

我收到以下错误:

Rscript execution error: No such file or directory

所以我检查了路径,但一切都检查过了:

ec2-user$ whereis Rscript
  Rscript: /home/ec2-user/bin/Rscript

ec2-user$ whereis R
  R: /home/ec2-user/bin/R /home/ec2-user/R

但是当我尝试在命令行中使用 Rscript 计算表达式时,我得到了这个:

ec2-user$ Rscript -e "" --verbose
  running
    '/usr/lib64/R/bin/R --slave --no-restore -e '

  Rscript execution error: No such file or directory

Rscript 似乎仍在默认位置“/usr/lib64/R/bin/R”中寻找 R,即使我的 R_HOME 变量设置为“/home/ec2-user”:

ec2-user$ echo $R_HOME
  /home/ec2-user

我找到了一些支持,但我找不到任何解决我的具体问题的方法。有人建议重新安装 R,但我的理解是,为了 Lambda 的目的,一切都需要自包含,所以我在一个单独的 EC2 实例上安装了 R,然后将其打包。我应该提一下,在安装了包管理器的 R 的机器上,一切都运行良好。

解决方案:发布我的 solution在答案中。

最佳答案

它认为它正盯着你看:

ec2-user$ whereis R
  R: /home/ec2-user/bin/R /home/ec2-user/R

是你放置 R 的地方——但是它是为/期望这样构建的:

ec2-user$ Rscript -e "" --verbose
  running
    '/usr/lib64/R/bin/R --slave --no-restore -e '

这些路径是不一样的。真正的错误可能是您假设您可以将构建和配置的 R 安装重新定位到不同的目录。你不能。

您可以为新的(已知的)路径构建 R 并安装它。在 configured-for 和 installed-at 路径相同的系统上,一切都很好:

$ Rscript -e "q()" --verbose
running
  '/usr/lib/R/bin/R --slave --no-restore -e q()'

$ 

关于Rscript 不适用于 AWS Lambda 的打包 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39278083/

相关文章:

Rscript 在容器中找不到已安装的包

r - 在 R 中使用文件名导入多个 Excel 文件

r - 如何在 R 中删除一些值较少的观察值?

javascript - R中的htmlwidgets中没有图形输出

python - 获取AWS EC2特定标签/值组合+实例ID

r - 1 :nrow(newdata) : argument of length 0 while using SVM predict 中出现错误

r - 显示使用 Rscript 执行的输入

Rlattice xyplot与网格与轴的刻度不匹配(不是多重图)

java - Cognito 通过用户名获取用户

amazon-web-services - 只需要记录 Cloudwatch 中的错误