Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中禁用默认库_R - Fatal编程技术网

在R中禁用默认库

在R中禁用默认库,r,R,默认的R库.library,在Windows下通常不可写。 您需要以管理员身份运行R。对于新软件包,您可以设置并使用个人库,但在基本设置中更新软件包时(例如,通过update.packages())此操作不起作用 如果您忘记(或不知道您需要)以管理员身份运行,则会得到相同软件包的重复版本,从而影响安装 我认为一种解决方案可以是将所有包复制到个人库中,并禁用默认库。我知道如何向R添加新的库路径,即.libpath(“my/path”),但如何从.libpath()中删除默认库 非Windows用户

默认的R库
.library
,在Windows下通常不可写。 您需要以管理员身份运行R。对于新软件包,您可以设置并使用个人库,但在基本设置中更新软件包时(例如,通过
update.packages()
)此操作不起作用

如果您忘记(或不知道您需要)以管理员身份运行,则会得到相同软件包的重复版本,从而影响安装

我认为一种解决方案可以是将所有包复制到个人库中,并禁用默认库。我知道如何向R添加新的库路径,即
.libpath(“my/path”)
,但如何从
.libpath()
中删除默认库

非Windows用户的更新 一些澄清可能有助于大多数非WindowsR用户理解上述问题

在Windows中,“以管理员身份登录”(最好是以属于管理员组的用户身份登录)和“以管理员身份运行”是完全不同的事情。
在前一种情况下,您只需在登录时提供凭据,就像在Linux中一样;在后者中,您已经以“超级用户”的身份登录,但为了执行潜在的危险操作,您必须请求对Windows的特别许可(证明是您而不是恶意软件)

也就是说,程序(和开发人员)在访问已知Windows的受保护对象(即
C:\Program Files
文件夹)之前,向用户请求权限以避免被操作系统阻止。
即使他们不要求(因为他们认为有知识的用户应该提前授予此权限),也会报告访问失败,如“拒绝访问文件夹等的权限”

对于R版本3.0.2
update.packages()
涉及一种情况,即应触发提升的权限请求,因为这可能涉及写入受保护的程序文件夹。不幸的是,R不询问,无法用旧包更新目录

第二个安全网是什么:用户通知?而
install.packages()

stop ... "'lib' element %s is not a writable directory" ...
当您想到权限问题时,对于其他函数,例如
update.packages()
,您会得到:

warning ... "package '%s' in library '%s' will not be updated" 
其原因可以是一切

这种情况还会更糟吗?对除了不请求写入“程序文件夹”的权限外,除了不发出权限错误通知,
update.packages()
,当无法更新受保护文件夹中的包时,实际上会将它们安装到个人用户文件夹中,但不会通知此错误。这类似于
install.packages()
所做的操作,只是后者会通知并请求权限执行此操作。 因此,您最终会在不同的文件夹中找到相同软件包的两个版本!因此,您的计算将取决于库优先级

这种情况还会更糟吗?对你足够聪明(或谷歌),当你想更新软件包时,你需要“以管理员的身份运行”。您以管理员身份重新启动R,并希望这将修复所有问题。一点也不。R在个人库中看到更新的包,并且不执行操作。因此,您仍然可以使用相同软件包的两个版本。
要解决这个问题,您必须检测重复的包并手动删除它们,然后以管理员身份重新启动R并再次更新(或者编写一个脚本来执行此操作)

显然,解决方案将符合Windows应用程序的预期行为,或者在被阻止采取行动时至少什么也不做(而不是做出未经通知的决定)

同时,我认为完全禁用默认库(位于受保护区域)将是一个临时解决办法


最后一个音符。软件包和软件包更新对于使用R是至关重要的,因此我的拙见是,即使对于像Windows这样GNU不太受欢迎的系统,这个主题也应该得到特别仔细的关注

一种解决方案是更改
R_LIBS
环境变量。你可以看到这个例子

但如果您没有管理员权限,则可以在加载包时指定位置:

library(my_package, lib.loc="my/path")

更新“基本包”通常通过重新安装来完成。我看不出“更新”具有“优先级”=“基本”状态的单个软件包的理由。@dwn这意味着安装修补程序版本,而您忘记了“推荐”优先级,这些软件包位于CRAN上,并且在R版本之间定期更新,特别是现在R的周期为12个月。@dwn:最近我运行了
update.packages()
,它试图更新一些3.0.2基本包。我没有以管理员的身份运行该命令,因此遇到了问题。更多信息:我看到了这个问题。为什么要更新“图形”?此外,您没有提供有关已安装版本(任何内容)的信息,因此无法真正了解您在做什么。@Dwin:我不想特别更新它,我想用
update.packages()
更新系统。我会用3.0.2版本号更新我的问题。