Linux Mint系统下如何让rpy2成功调用已安装的tidyverse或完成tidyverse的安装
Linux Mint系统下如何让rpy2成功调用已安装的tidyverse或完成tidyverse的安装
问题1:调用已通过apt安装的tidyverse
你遇到的核心问题是rpy2默认关联的R环境,和你用apt安装的系统R,二者的包路径不重叠——apt装的tidyverse存在系统R的专属库目录里,但你的Python虚拟环境(比如miniforge的env)里的R实例,默认不会去扫描这个系统路径,所以才会报“包未安装”的错误。
解决起来很简单,分两步走:
- 先打开能正常加载tidyverse的R控制台,运行这条命令,拿到系统R的包存储路径:
输出的列表里,通常会有一个类似.libPaths()/usr/lib/R/library的路径,这就是apt安装R包的位置。 - 回到Python代码里,先把这个系统路径手动添加到rpy2使用的R的库路径中,再尝试导入包:
import rpy2.robjects as ro from rpy2.robjects.packages import importr # 把你从R里拿到的系统包路径填进去 ro.r('.libPaths(c(.libPaths(), "/usr/lib/R/library"))') # 现在再导入就没问题了 tidyverse = importr('tidyverse') survey = importr('survey') srvyr = importr('srvyr')
这样rpy2就能识别到你之前用apt安装的所有R包了。
问题2:用rpy2重新安装tidyverse时依赖缺失
你手动逐个装依赖的思路可行,但太繁琐——R本身支持自动递归安装所有层级的依赖,只要在安装时开启对应选项就行。另外建议先设置国内CRAN镜像,避免下载慢或者连接失败的问题。
直接用这段代码就能一次性搞定:
import rpy2.robjects as ro from rpy2.robjects.packages import importr utils = importr('utils') # 先设置一个稳定的CRAN镜像,比如清华镜像 ro.r('options(repos = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))') # 安装tidyverse,同时自动安装所有递归依赖 utils.install_packages('tidyverse', dependencies = True)
dependencies = True这个参数会让R自动处理所有层级的依赖包,不用你手动去装memoise、conflicted这类子依赖,一次性就能完成tidyverse的完整安装。
备注:内容来源于stack exchange,提问作者TFXB
相关产品推荐
相关产品推荐

