默认的R库.Library
通常在Windows下无法写入。
您需要以管理员身份运行R.对于新包,您可以设置和使用个人库,但在基本设置中更新包时(例如update.packages()
),这不起作用。
如果您忘记(或不知道您需要)以管理员身份运行,您将获得相同软件包的重复版本,从而弄乱了安装。
我认为一种解决方案可能是将所有包复制到个人库并禁用默认包。我知道如何向R添加新的库路径,即.libPaths ("my/path")
,但如何从.libPaths ()
中删除默认库?
一些说明可能有助于大多数非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功能较少的系统,该主题也应该得到特别的关注。
答案 0 :(得分:1)
一种解决方案是更改R_LIBS
环境变量。您可以看到例如question。
但是如果您没有管理员权限,则可以在加载包时指定位置:
library(my_package, lib.loc="my/path")