我在Windows上运行R,而不是以管理员身份运行。安装软件包时,以下命令不起作用:

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable


要安装软件包,我必须指定一个库位置:

install.packages("zoo", lib="C:/software/Rpackages")


要加载程序包,我还必须指定库的位置:

library("zoo", lib.loc="C:/software/Rpackages")


所有这些都可以,但是我想看看是否可以以某种方式将C:/software/Rpackages添加到库路径中,因此不必每次都键入它。

当我在线搜索时,我发现一种方法是编辑Rprofile.site文件并添加行

.libPaths("C:/software/Rpackages")


但是,执行此操作并启动RStudio之后,这是我得到的输出

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 


我添加到.libPathsRprofile.site命令似乎没有任何效果!为什么会这样呢?或更重要的是,如何解决该问题,以便无需键入库位置即可安装和加载软件包?

注意:如果启动RStudio,.libPaths()命令似乎可以正常运行

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"


这不是很奇怪吗?

评论

您能否进一步说明一下install.packages(“ zoo”)到底是如何工作的?错误消息等?

@joran我尝试安装install.packages(“ zoo”)-时添加了错误消息,但这不是我真正的问题,这是为什么Rprofile.site中的.libPaths()无法正常工作。

如果您使用RGui而不是R Studio,也会遇到同样的麻烦吗?

为什么R的库路径默认为需要管理员权限的文件夹?当然,用户的主目录会更合理

superuser.com/questions/749283/…编辑〜/ .Renviron R_LIBS_USER = / some / path

#1 楼

我通常会尝试将所有软件包都保存在一个库中,但是如果要添加一个库,为什么不将新库(文件系统中已经存在的库)追加到现有库路径中?

或者,(这将使userLibrary成为放置新软件包的第一位):

.libPaths( c( .libPaths(), "~/userLibrary") )


然后我得到了(至少回来了)我最初写这篇文章时):

.libPaths( c( "~/userLibrary" , .libPaths() ) )


.libPaths函数与大多数其他非图形函数有些不同。它通过副作用起作用。报告和更改R环境变量的函数Sys.getenvSys.setenv已分开,但.libPaths可以报告或更改其目标。

有关R启动过程的信息可以在?Startup帮助页面上阅读,并且RStudio资料位于:https://support.rstudio.com/hc/en-us/articles/200549016-Customizing -RStudio

在您的情况下,RStudio似乎不遵守Rprofile.site设置,或者通过从RStudio默认值之一读取.Rprofile设置来覆盖它们。还应该提到的是,此操作的结果还将调用的内容附加到.Library.Library.site,这是托管RStudio(或安装了任何其他IDE或网络)的R可能表现出不同行为的进一步原因。 >
由于Sys.getenv()返回了R进程的当前系统环境,因此可以通过以下方式查看库和其他路径:

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  


这两个与存储有关的和访问程序包(现在在Linux机器上不同):

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]


评论


我需要反转c()向量以确保新库进入自定义文件夹

–地理理论
2015年2月10日14:31

优点。实际上,默认情况下,.libPaths函数具有相同的效果。操作系统之间在处理斜杠的方式方面也存在差异。 (在Windows上不行)。存在其他选项。请参阅?.libPaths

– IRTFM
2015年2月10日在16:20



新路径实际上必须存在于文件系统中,否则它将不会添加到库路径中

– jarandaf
15年4月18日在11:19

另一个好点。尽管函数名称另有建议,但您可以先使用file.exists进行检查,然后仅在路径不丢失的情况下继续操作。

– IRTFM
15年5月13日在16:30

我做到了,而且行得通,但似乎每次启动R时都必须更改路径。对其他人也一样吗?

– cyrusjan
16年5月20日在8:45

#2 楼

正确的解决方案是将环境变量R_LIBS_USER设置为所需库文件夹的文件路径的值,而不是让RStudio识别Rprofile.site文件。
要在Windows中设置环境变量R_LIBS_USER,请转到“控件”面板(系统属性->高级系统属性->环境变量->用户变量)设置为所需值(库文件夹的路径),例如
Variable name: R_LIBS_USER 
Variable value: C:/software/Rpackages  

如果由于某种原因您无权访问到控制面板,您可以尝试在Windows上从命令行运行rundll32 sysdm.cpl,EditEnvironmentVariables并从那里添加环境变量。
设置R_LIBS_USER将确保该库首先显示在.libPaths()中,而无论直接启动RStudio还是通过以下方式启动右键单击文件,然后单击“打开方式”以启动RStudio。
如果始终通过单击RStudio快捷方式启动RStudio,则Rprofile解决方案可以使用。在这种情况下,将默认工作目录设置为Rprofile所在的目录就足够了。单击文件以启动RStudio时,Rprofile解决方案不起作用,因为这会将工作目录从默认工作目录中移出。

评论


同意适当的解决方案!

– felixmc
14年6月26日在11:01

绝对是正确的解决方案。唯一的问题是,如果您的用户不是管理员(可能是因为遇到此问题而开始),则必须通过“控制面板”->“用户帐户”->“用户帐户”->“更改我的环境”来更改环境变量变量。

– David Moye
2015年3月2日在16:46



您(偶然)知道Linux命令行中的等效语言吗?

– Diego-MX
2015年4月8日在22:39

当然,只需将它们设置为shell变量即可(在bash中,您可以编辑.bash_profile和/或.bashrc)。参见此处:unix.stackexchange.com/questions/117467/…要仅针对当前会话设置这些内容,请在控制台中输入R_LIBS_USER ='directory_of_your_choice'

–PawełRumian
2015年4月9日在10:43



我没有通过控制面板设置变量,而是修改了Rprofile文件中R_LIB_USER的默认值。这里是解决方案:我想出了一种类似的方法,该解决方案作为此问题的解决方案呈现在stackoverflow.com/questions/31707941/…

–马可
17 Mar 7 '17 at 8:52

#3 楼

我设法通过将代码放在默认工作目录中的.Rprofile文件中来解决了这个问题。首先,我找到了默认工作目录的位置。

/>
然后我使用文本编辑器编写了一个简单的.Rprofile文件,其中包含以下行

> getwd()
[1] "C:/Users/me/Documents"


最后,当我启动R并运行.libPaths()我得到所需的输出:

.libPaths("C:/software/Rpackages")


评论


这对我不起作用(BondedDust的解决方案也不对)。我创建了一个txt文件,并将其另存为getwd()中的.Rprofile文件。

–约翰
14年4月7日在18:01

@约翰,我相信我们在说同样的话。

–我喜欢编码
2014年4月7日在21:04



R从您的HOME目录而非当前目录中读取.Rprofile。

–CRT
16年6月21日在21:29

我想出了一种类似的方法,该解决方案作为此问题的解决方案提供了stackoverflow.com/questions/31707941/…

–马可
17年7月7日在8:49

要找到家庭目录,请在r控制台中发出r命令Sys.getenv(“ HOME”)。我不确定您是否获得所需的输出。我认为期望的输出是42在他的答案stackoverflow.com/a/15170774/754550中显示的内容。他使用.libPaths的方式略有不同。

– miracle173
17 Mar 15 '17在8:07

#4 楼

https://superuser.com/questions/749283/change-rstudio-library-path-at-home-directory

编辑〜/ .Renviron

R_LIBS_USER=/some/path


#5 楼

我发现这里是我认为的解决方案(感谢SFU的Carl Schwarz),添加了一个永久性的个人库(您不必在每次会话中都定义它),可以识别使用R还是Rstudio,Rstudio将其视为在我的Mac机器上默认。我没有看到它明确地在SO上列出,所以我总结了它们为Windows和Mac提供的步骤。

对于Windows 7操作系统:


在驱动器上要创建个人库的目录中,例如C:\ User \ Rlibs(或您拥有权限的另一个)
在Windows搜索栏中搜索/转到“为您的帐户编辑环境变量”以编辑控制面板设置。
单击“新建”。 “ ..”在“环境变量”窗口的中间
在“新用户变量”窗口中,为“变量名称”键入R_LIBS,并输入您创建的个人图书馆目录的路径,例如C:\ User \ Rlibs
单击“确定”,您应该在“用户变量”窗口中看到变量/值对
再次单击“确定”

现在当您启动R(或Rstudio)时并键入命令.libPaths(),您应该会看到创建的个人库以及R系统库。

对于Mac:


在“主页”中,或者“用户名”目录创建一个名为Rlibs的文件夹
启动终端应用程序
键入:echo "R_LIBS=~/Rlibs"> .Renvrion确保大小写匹配。
键入ls -a以查看目录中文件的完整列表,该文件现在应包括.Renvrion
验证.Renviron文件是否已正确设置:more .Renviron

启动R / Rstudio并键入.libPaths(),您应该看到指向个人库的新路径。

#6 楼

如果您没有管理员权限,则打开\ R-3.1.0 \ etc中的Rprofile.site-文件并添加以下内容也可能会有所帮助:

.First <- function(){
  .libPaths("your path here")
}


这将直接在开始时评估.libPath()命令

#7 楼

我很难理解这一点。上次重新安装OS和Rstudio时,gorkypl提供了上述正确的解决方案,但是这次,设置环境变量无法解决。

卸载R和Rstudio都创建了目录C:\ R然后将C:\ Rstudio重新安装。

将R_LIBS_USER用户变量定义到您的首选目录(根据gorkypl的回答),然后重新启动计算机以加载User变量。打开Rstudio,错误应该消失了。

您还可以使用Sys.setenv()将R_LIBS_USER修改为替代库的路径,这更容易,不需要重新启动计算机。

要查看R_LIBS_USER设置为什么:
?Sys.getenv()

读取help(Startup)很有用。

#8 楼

如果在安装新版本的R后或通过其他任何方式更改了默认软件包库,则可以在以下命令的帮助下附加两个库以使用所有软件包。
获取现有的库路径:

.libPaths()

现在,设置现有路径和旧路径:

.libPaths(c(.libPaths(), "~/yourOldPath"))

希望有帮助。
/>

#9 楼

只需在没有管理员权限的目录中更改R库的默认文件夹,例如

.libPaths("C:/R/libs")


#10 楼

我读了自述文件。他们提到了在命令行中使用.libPaths()来检查存在哪些路径。我之前有2个库路径。当我在需要的位置使用命令.libpath(“ C:/ Program Files / R / R-3.2.4revised / library”)时,它更改了库路径。当我再次在命令行中输入.libPaths()时,它向我显示了正确的路径。希望这会有所帮助

#11 楼

在Ubuntu上,建议的更改用户默认库路径的方法是在R_LIBS_USER文件中设置~/.Renviron变量。

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron


#12 楼

getwd()
# [1] "C:/Users/..../software/My R studio"


复制上面的链接并使用双引号逗号

.libPaths(new="C:/Users/..../software/My R studio")


您的默认路径将更改用于安装包装的

#13 楼

如果要永久更改库路径(在输入R时无需每次都调用.libPath(),则对我有用:


在主目录下创建.Rprofile。(〜 /.Rprofile)
在.Rprofile文件中键入
.libPaths(c( .libPaths(), "your new path" ))
,保存。
打开R(任何目录)并检查,只需键入.libPaths(),您就会发现libaray路径已更新!


#14 楼

由于此处的大多数答案都与Windows和Mac OS有关(并且考虑到我也为此感到困惑),因此我决定在Arch Linux安装程序中发布有助于解决此问题的过程。
步骤1:

对系统进行全局搜索(例如ANGRYSearch)以查找术语Renviron(这是设置用户库设置的配置文件)。
它应该仅在以下位置返回两个结果:以下目录路径:

/etc/R/


/usr/lib/R/etc/注意:存储在1和2(上方)的Renviron配置文件彼此热链接(其中表示对一个文件所做的更改将在保存正在编辑的文件时自动以相同的格式/结构应用于另一个文件-[您还需要sudo权限才能保存文件的后期编辑])。



步骤2:

导航到第一个目录路径(/etc/R/),然后使用您喜欢的文本编辑器打开Renviron文件。在Renviron文件旁边搜索R_LIBS_USER标记,并将花括号部分中的文本更新为所需的目录路径。示例:
...更改为(原始条目):R_LIBS_USER=${R_LIBS_USER-'~/R/x86_64-pc-linux-gnu-library/4.0'}
...更改为(您想要的条目):R_LIBS_USER=${R_LIBS_USER-'~/Apps/R/rUserLibs'}


步骤3:

保存刚刚编辑的Renviron文件...完成!


#15 楼

我正在研究此问题,因为R在安装到默认位置时遇到问题,而只是将软件包放入temp文件夹中。原来,它是Mcaffee Endpoint Security的最新更新,显然是R的问题。您可以在安装软件包时禁用威胁防护,然后它才能正常工作。