【问题标题】:.Renviron variables not found when Rscript run from powershell?从powershell运行Rscript时找不到.Renviron变量?
【发布时间】:2019-11-20 01:55:22
【问题描述】:

我有一个从 Rstudio 运行时可以完美运行的 R 脚本。它使用.Renviron 文件提供在Sys.getenv() 中可见的环境变量(所以我知道它有效)。

但是,当我通过 powershell 运行完全相同的脚本时,R 脚本神秘地找不到那些环境变量(我通过print(Sys.getenv()) 确认了这一点 - 通过.Renviron 提供的环境变量无处可见。

问题

为什么从 powershell 运行 R 脚本时找不到 .Renviron 变量(而不是在 RStudiom 中运行脚本时,一切正常)

我尝试过的

.Renviron 文件当前保存在"C:/Users/Administrator/Documents/.Renviron"

检查normalizePath(Sys.getenv('R_HOME')) 返回"C:\\Program Files\\R\\R-3.6.0",所以我也尝试将.Renviron 放在那里。没有运气

基于this,我也试过Sys.getenv("C:/Users/Administrator/Documents/.Renviron"),但还是没有运气

【问题讨论】:

  • 是的 - 还可以确认,当从命令行启动 R 时,位于 R_USER 目录(即C:\\Users\\Username)中的 WIN 10 .Renviron 未被读取。

标签: r renviron


【解决方案1】:

我遇到了同样的问题:.Renviron 文件在 Windows 上被完全忽略。
我认为最终可行的是重新安装 R(我有 R 3.6,安装了 R 4.0)。

但事实证明我错了。神奇的酱汁是将--cd-to-userdocs 添加到R.exeRscript.exe 命令。 我在任何地方都找不到此选项的文档,并且它没有显示在命令行参数帮助中,但它可以工作。

【讨论】:

  • 很高兴知道它已修复。我认为@G.Grothendieck 对另一个答案的评论是非常正确的,因为很难准确地看到 R 正在读取哪些 (.Renviron) 文件
  • 这个解决方法是“好的”,但我经常不想在从命令行启动 R 时更改到 userdocs (My Documents) 文件夹 - 所以不是一个真正令人满意的情况,是吗.
【解决方案2】:

RScript 执行与普通 R 相同的初始化,除非使用命令行选项 (--no-environ) 专门禁用了这一点。在不同的位置搜索.Renviron.Rprofile 文件,按优先级降序排列:

  1. 在当前工作目录中
  2. 在用户的主目录中
  3. 在 R 主目录中 (R_HOME)

The documentation gives more details.

由于您尝试更改位置 (2) 和 (3) 中的文件但没有成功,因此您的当前工​​作目录中有 另一个 .Renviron 文件是理所当然的。你正在启动Rscript

【讨论】:

  • 我喜欢最佳实践的想法(即避免绝对路径)。但我确信没有额外的.Renviron 文件——只有一个。 (.R 脚本肯定是用Rscript "C:\Users\Administrator\Desktop\myscript.R 运行的
  • 另外,如果我将print(Sys.getenv()) 放在readRenviron() 行的调用的任一侧,我可以看到两个环境变量列表。第一个没有在.Renviron 中声明的那些,而第二个有。我不认为重复的.Renviron 文件是原因..
  • @user5783745 你是从哪里运行这个命令的呢? cd 打印什么?那里有 .Renviron 文件吗? Rscript 是什么?它是否可能是 actual Rscript 二进制文件的别名,它设置了 --no-environ 选项?如果这两种情况都不是,我建议重新安装 R,因为您的安装似乎已损坏。
  • @ 我在C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 中有一个快捷方式,它指向桌面上只有几个文件的目录(.git 和 rscript - 100% 确定那里没有.Renviron 文件) .另外,我勾选了隐藏文件(只是为了排除另一个可能的原因)
  • 这个问题有解决办法吗?我在全新安装 R 4.02 的 Windows 10 上遇到了同样的问题。
【解决方案3】:

这对我有用

path_to_Renviron_file <- "C:/Users/Administrator/Documents/.Renviron"
readRenviron(path_to_Renviron_file) 

【讨论】:

  • 这是不正确的,R 确实加载了~/.REnviron文件,并且该文件不应该被显式加载。
  • @KonradRudolph 该行解决了该问题。如果不是因为上述原因,我不知道为什么?你知道吗?你能在你的机器上测试它吗,我不知道为什么它对你有什么不同。我在 EC2 上运行 windows server 2019 (Microsoft Windows Server 2019 Base - ami-0bbdf9279190cdd33)
  • 看我的回答。这种变通方法修复的问题在于它们不能解决实际问题,因此一旦发生变化,可能会以意想不到的方式中断。无论如何,使用硬编码的绝对路径是一个很大的禁忌——部分原因在这里解释:tidyverse.org/articles/2017/12/workflow-vs-script
  • 我认为真正的问题是没有好的方法来发现 R 真正在做什么。没有明确的环境路径变量可供检查以查看它实际在哪里寻找,也没有办法从 R 获得反馈以允许它显示它正在读取或未读取哪些文件。
  • @G.Grothendieck 这是一个很好的观点。调试这些问题真的很痛苦。
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2013-10-28
相关资源
最近更新 更多