提前提醒:要是遇到以下提示bug的同学,还是直接重装吧,这个问题在github的Issues上面有不少人碰到过了(我也去问了),但是目前为止,连维护这个框架的作者也并没有给出修复这个bug的答案。我是重装完之后才成功的…我猜测这个错误是因为安装的各种包依赖紊乱导致的(仅仅猜测)。
R Python Error Output
-----------------------
[Errno 2] No such file or directory: 'C:\\Users\\xxx\\AppData\\Local\\Temp\\cdt_pc_dccede31-26aa-4f57-a35b-5aeb44deaf6b\\result.csv'
RuntimeError: RProcessError
R Process Error Output
写这篇文章是由于楼主在装这个工具时碰到太多坑了。分享一些我的安装历程,希望帮到后面的人。
初衷:我装这个cdt
是为了跟dowhy
框架结合起来使用的,cdt
用来做因果发现,dowhy
用来做因果效应评估,因为dowhy
的输入得有一个因果图
吐槽:装cdt
是真滴麻烦,依赖pytorch
和R
,但是直接使用命令pip install cdt
并不会把所有依赖的库全部打包下载。而在装完cdt
之后再去安装pytorch和R的话又会导致各种各样的依赖不匹配,版本不match的各种bug,令人十分奔溃。
一、安装cdt 及其基本依赖环境
首先pip install cdt
然后安装cdt
依赖的库
下图给出cdt
所依赖的各个库。
推荐后面需要使用cdt
的伙伴们,都用以下的方式进行安装,经我测试还是比较稳妥的,并且建议使用anaconda新建一个环境,我新建的环境中python版本是3.10.6。 以下命令在conda activate env-name(新建环境名字)后 ,就可以输入进行下载了。
(以下步骤需要提前安装git,附git安装链接)
$ git clone https://github.com/FenTechSolutions/CausalDiscoveryToolbox.git # Download the package
$ cd CausalDiscoveryToolbox
$ pip install -r requirements.txt # Install the requirements
就是直接从github下载这个框架的源代码,使用pip install -r requirements.txt
命令下载这个框架所需要的依赖,这样可以自动搜索相互匹配的各个版本库,不会导致包冲突,进而出来各种奇奇怪怪的bug[吐血]。
然后去运行以下demo代码测试
import cdt
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
from cdt.causality.graph import PC
# Load the data
data = pd.read_csv("http://www.causality.inf.ethz.ch/data/lucas0_train.csv")
# Infer the causal diagram
pc_output = PC().create_graph_from_data(data)
# Visualize the diagram
nx.draw_networkx(pc_output)
plt.show()
给我爆了个“R Call errored, is R available ?”
这样的错误。
R??这是啥玩意? 后面去到cdt
官方文档里头查找,才知道cdt
这框架还用到R语言下的一些算法包。
在调用PC或者(LiNGAM)等算法时cdt.causality.graph.PC
,会依赖到R下的某些包。
好吧这回又得去下载R语言。
二、安装R语言及相应R包
这里贴一下下载R语言的官方链接
但是我没有下载最新版本的R-4.2.2(最新的大多容易出事)
我下载的windows下的旧版本R-4.1.2(后面我照着流程再装了一次…4.1.2报错了…然后我换装R版本为4.2.3的了,成功!)
(1)R语言安装过程界面
①:选择中文
②:下一步
③定义安装位置
④:我去掉了32字节的
⑤默认下一步
⑥默认下一步
然后就等待安装完成…
(2)R包安装过程
安装完R语言之后,还得安装cdt
所依赖的R包。
看看github上面给出的依赖R包目录。
接下来在R下安装所依赖的各种R包
打开R界面:
(这玩意是真滴陌生呀…)
安装R包的几种方式贴个链接
①如果没记错的话
pcalg和kpcalg是直接通过
install.packages("xxx")
xxx包名可以直接下载的
其余的包只能借助BiocManager
来安装
install.packages('BiocManager')
library(BiocManager)
install('xxx') #xxx是包名
或者直接一条命令打包下载
install.packages('BiocManager')
BiocManager::install(c("SID", "bnlearn", "pcalg", "kpcalg", "glmnet", "mboost"))
library(xxx) #好像是调用包,加载到内存的意思?不太确定
②但是这里也有个暗坑!
就是RCIT
这个包,会弹错误“package ‘XX’ is not available for this version of R”
解决这个问题是参考github链接方法
直接上安装代码:
install.packages("devtools") # 安装devtools
library(devtools) # 加载devtools
install_github("Diviyan-Kalainathan/RCIT") #通过github的方式安装
#以下三行代码是测试是否安装成功RCIT
library(RCIT)
RCIT(rnorm(1000),rnorm(1000),rnorm(1000))
RCoT(rnorm(1000),rnorm(1000),rnorm(1000))
③还有还有!!还有一个R包SID
也没有办法这样安装,得另辟新径!
在尝试安装SID
时会提示找不到SID
,解决办法是手动安装。
首先R包SID
官方已经提示下架了
但是我安装了旧版本的也能用
贴旧版本的R包SID
的下载链接
下载完之后
就是导入下载的SID
包了。
在这里导入SID
包
选择导入就ok了。
PS.如果导入不成功,报错提示 “ERROR: dependency 'RBGL' is not available for package 'SID'”
则需要先安装 “RBGL”包,安装指令为:BiocManager::install("RBGL"),需要利用前面安装过的BiocManager来进行安装。
然后再试着导入,或者使用命令从线上直接下载,而不是通过本地的方式。命令为:
install.packages("https://cran.irsn.fr/src/contrib/Archive/SID/SID_1.0.tar.gz", repos=NULL, type="source", Ncpus=4)
即可成功!
至此,安装cdt
及其所依赖的R环境就基本都配置好啦!!至少运行上述的代码demo没问题了~
如果后续还缺少R包的话再用相似的方式安装即可
可参考官方建议安装方式
如果这些都配置好之后,运行代码还是报错“R Call errored, is R available ?”
,此时是因为cdt
找不到R包,就还得去修改cdt
找R包的路径。
具体修改步骤:
1、找到对应的cdt
安装路径,我是在anaconda下配置的环境,我的路径是D:\anaconda3\envs\dowhy\Lib\site-packages\cdt
2、进入utils,打开Settings.py,修改_init_函数下的self.rpath参数为对应的刚才R语言安装目录下的Rscript的路径,我的Rscript路径为D:\SoftWare\R-4.1.2\bin\Rscript.exe
3、最终修改样式:
self.rpath = 'D:\\SoftWare\\R-4.1.2\\bin\\Rscript.exe'
运行上述demo代码
结果:
大功告成!