禁用R中的默认库

时间:2013-12-15 19:43:44

标签: r

默认的R库.Library通常在Windows下无法写入。 您需要以管理员身份运行R.对于新包,您可以设置和使用个人库,但在基本设置中更新包时(例如update.packages()),这不起作用。

如果您忘记(或不知道您需要)以管理员身份运行,您将获得相同软件包的重复版本,从而弄乱了安装。

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

非Windows用户的更新

一些说明可能有助于大多数非Windows R用户理解上述问题。

在Windows中“以管理员身份登录”(或者更好地作为属于管理员组的用户)和“以管理员身份运行”是完全不同的事情。
在前一种情况下,您只需在登录时提供凭据,就像在Linux中一样;在后者中,您已经被记录为“超级用户”,但是为了执行潜在的危险操作,您必须向Windows提出 ad hoc 权限(证明它是您而不是恶意软件)表演)。

据说,程序(和开发人员)在访问已知的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()所做的,除了后者通知并请求允许这样做。 所以你最终得到了不同文件夹中相同包的两个版本!因此,您的计算将取决于图书馆的优先级。

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

显然,解决方案是R符合Windows应用程序的预期行为,或者至少在阻止行为时不执行任何操作(而不是采取未通知的决策)。

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

最后一点。软件包和软件包更新对于使用R至关重要,所以我的拙见是,即使对于像Windows这样的GNU功能较少的系统,该主题也应该得到特别的关注。

1 个答案:

答案 0 :(得分:1)

一种解决方案是更改R_LIBS环境变量。您可以看到例如question

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

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