gpt4 book ai didi

r - 将 R 库从/usr/lib/R/library 迁移到自定义库

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:09 24 4
gpt4 key购买 nike

这台 Linux 机器上安装的所有 R 包都安装在 /usr/lib/R/library 中。我想将这些包移动到另一个位置,例如 /home/username/.R_libs。我不仅想在此新位置安装包,而且还想将所有以前安装的包迁移到该位置。

.libPaths() 的输出是:

[1] "/home/username/.R_libs" "/usr/lib/R/library"

但是,如果我只是移动所有的包,就像这样:

sudo mv /usr/lib/R/library/* /home/username/.R_libs/

R 无法再启动,因为它似乎无法找到基础包。

对于环境变量,$R_LIBS设置为/home/username/.R_libs,而$R_HOME$ R_LIBS_USER 在 shell 中未设置。但是,由于某些原因:

> Sys.getenv("R_LIBS")
[1] "/home/username/.R_libs"
> Sys.getenv("R_HOME")
[1] "/usr/lib64/R"
> Sys.getenv("R_LIBS_USER")
[1] "~/R/x86_64-pc-linux-gnu-library/3.4"

请注意 ~/R/x86_64-pc-linux-gnu-library/3.4 不存在,我不想创建它,我只想使用 /home/用户名/.R_libs.

简而言之,我希望从现在开始 R 将只考虑 /home/username/.R_libs 并且始终将库安装到该位置(或从中读取库)而不要求确认或其他选项.

如果我理解正确的话,最好的选择可能是只移动非基础包,即手动安装的包。这可能吗?这可以做到吗?请注意,我不想卸载然后重新安装所有软件包,

最佳答案

我通过在 R 中列出所有具有 Priority NA 或“推荐”的包并仅使用 bash 脚本移动它来解决这个问题。这将忽略 R 似乎需要存储在当前位置的所有基本 R 包。因此,从 R 创建一个文本文件以从 bash 脚本中读取:

ip <- installed.packages(lib.loc="/usr/lib/R/library/")[ , "Priority"]
write.table(installed.packages(lib.loc="/usr/lib/R/library/")[is.na(ip) | ip=="recommended", 1], file="ip.txt", row.names=FALSE, quote=FALSE)

请注意,您需要将 /usr/lib/R/library/ 更改为您要从中复制的正确文件夹。

然后运行此 bash 脚本(记住设置您自己的目标目录,存储在 output 变量中,以及您的用户名,存储在 user 变量中):

#!/bin/bash

set -e
{
input="/usr/lib/R/library/"
output="/home/username/.R_libs/"
user="username"
packages="ip.txt"

for p in $(cat ${packages})
do
if [ -e ${input}/${p} ]; then
echo Moving package ${p}
mv ${input}/${p} ${output}/${p}
else
echo Package ${p} is not present in ${input}
fi
done
echo Changing perimssions...
chown -R ${user} .R_libs/*
echo All done!
}

一切都应该正确移动。

关于r - 将 R 库从/usr/lib/R/library 迁移到自定义库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44420803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com