我想在Rmarkdown bash块中设置一个环境变量,并在以后的R块中访问它。本质上,我想做这个问题的反面,这个问题已经被回答了很多次:RMarkdown从bash块访问参数
我可以使用R将参数传递到bash块中:
Sys.setenv(MY_PARAM = 'param value')
并在bash中访问它:
echo $MY_PARAM
参数值
但是,当我尝试将环境变量存储在bash中时,以后无法在R中访问它:
再次重击:
export MY_PARAM2="param value"
echo $MY_PARAM2
参数值
后来的R块:
Sys.getenv('MY_PARAM2')
[1]“
我将对任何其他有关如何将变量从bash代码块中传递出来以用于以后的块中的想法持开放态度。这是Rmarkdown中复制的全部内容:
```{r}
Sys.setenv(MY_PARAM = 'param value')
```
```{bash}
echo $MY_PARAM
```
```{bash}
export MY_OTHER_PARAM="param value"
echo $MY_OTHER_PARAM
```
```{r}
Sys.getenv('MY_OTHER_PARAM')
```
bash中的导出值仅在同一会话中可用。因此,如果R是在同一会话中启动的,则R将只能看到该值。如果您的情况如此,那么您的问题已经包含了答案。事实证明这是可行的,请参见此类似问题。
但是,如果R进程或其子进程是在其自己的Shell中启动的,则会话变量(例如)MY_OTHER_PARAM
对于该R进程可能是未知的。这可能是由rmarkdown / knitr处理外部命令的方式引起的。您可以使用以下代码片段看到此问题:第二个bash会话也不知道导出的变量。其他人也报告了此问题。
```{bash}
export MY_OTHER_PARAM="param value"
echo $MY_OTHER_PARAM
```
```{bash}
echo $MY_OTHER_PARAM
```
因此,最简单的解决方案是将信息存储在特定文件中,并在后续会话中读取它:
```{bash}
echo 'export MY_OTHER_PARAM="param value"' > .rvars
source .rvars
echo $MY_OTHER_PARAM
```
```{bash}
source .rvars
echo $MY_OTHER_PARAM
```
如果我们已经使用过文件,则跳过环境作为返回路径。
```{bash}
echo 'param value' > .myparam
cat .myparam
```
```{bash}
echo $(cat .myparam)
```
```{r}
string <- paste(readLines(".myparam"), collapse=" ")
print(string)
```
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句