繁体   English   中英

如何在R中重置或完全覆盖.libPaths?

[英]How to reset or completely override .libPaths in R?

我希望.libPaths()返回"/home/balter/R" "/home/balter/conda/envs/dada2/lib/R/library"

这就是我得到的:

> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(new='/home/balter/conda/envs/dada2/lib/R/library')
> .libPaths()
[1] "/home/balter/conda/envs/dada2/lib/R/library" "/usr/local/lib/R/site-library"              
[3] "/usr/lib/R/site-library"                     "/usr/lib/R/library"                         
> .libPaths(new=c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(new=c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"            
> .libPaths(new="home/balter/R")
> .libPaths()
[1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"       "/usr/lib/R/library"           
> .libPaths("home/balter/R")
> .libPaths()
[1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"       "/usr/lib/R/library" 

我似乎无法清除并重置路径。

注意:

这是RStudio Server免费版,可在localhost上的WSL Ubuntu 18.04中运行。

注二:

@Dason指出了一个错字。 更正我有:

> .libPaths()
[1] "/home/balter/R/x86_64-pc-linux-gnu-library/3.4" "/usr/local/lib/R/site-library"                 
[3] "/usr/lib/R/site-library"                        "/usr/lib/R/library"                            
> .libPaths(c("/home/balter/conda/envs/dada2/lib/R/library", "~/R"))
> .libPaths()
[1] "/home/balter/conda/envs/dada2/lib/R/library" "/home/balter/R"                             
[3] "/usr/local/lib/R/site-library"               "/usr/lib/R/site-library"                    
[5] "/usr/lib/R/library"                         
> 

有没有一种方法可以完全摆脱默认设置,从而只包括第一个?

这已经很老了,但是没有标记答案,所以这是我的输入:

我刚刚通过在项目目录的根目录中定义.Renviron来覆盖rstudio服务器的默认R_ *环境变量来解决此确切问题。

# .Renviron example - set exclusive R library
R_LIBS=/path/to/your/envs/R/library/ # Set env's R library location
R_LIBS_USER=""                       # Unset user's local R library
R_LIBS_SITE=""                       # Unset default system R libraries
    # !EDIT! - Make sure the version of R you set to R_HOME is the one that RStudio-Server 
    #    is running. (I haven't been able to get the server to run Anaconda's version)
    #  When I changed R_HOME to the version in my conda env and the server was running 
    #    the system R, it broke all of the locally compiled packages.
R_HOME=/path/to/your/envs/R          # Reset R's home directory to the one in the env's home

如果您不知道,.Renviron是R会话启动时运行的脚本。 顾名思义,它专门用于设置环境变量。

您还可以在启动时以.Rprofile脚本运行R代码。 下面的示例脚本将为您的.libPaths添加新路径,但不会导致删除通过在R_LIBS *目录中搜索而找到的库。

# .Rprofile - set .libPaths
assign(".lib.loc", "/path/to/your/envs/R/library/", envir = environment(.libPaths))

您可以从项目根目录,用户主目录和R的主目录中级联这些配置文件,它们将优先按该顺序运行(但仅会运行每种脚本类型的第一个)。

我认为.Renviron在.Rprofile之后运行(或稍后处理环境变量),因为我使用上述.Rprofile脚本所做的更改始终被环境变量覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM