我在从Python内部实现R的传输熵包时遇到问题

时间:2019-06-20 14:38:05

标签: python r rpy2

我希望通过使用rpy2调用R的RTransferEntropy包来计算JupyterLab笔记本中的传输熵,但是这样做遇到了问题。

我正在将Anaconda与Python 3.7配合使用,并已将RStudio安装为我的环境之一。在RStudio中,我已经成功实现了RTransferEntropy包中的示例:

 install.packages('RTransferEntropy')
 library(RTransferEntropy)
 set.seed(12345)
 n <- 2500
 x <- rep(0, n + 1)
 y <- rep(0, n + 1)

 for (i in 2:(n + 1)) {
    x[i] <- 0.2 * x[i - 1] + rnorm(1, 0, 2)
   y[i] <- x[i - 1] + rnorm(1, 0, 2)}

 x <- x[-1]
 y <- y[-1]

 library(future)
 plan(multiprocess)
 set.seed(12345)
 shannon_te <- transfer_entropy(x, y)

 shannon_te 

所有内容都能找到,并且我能够获得文档中显示的正确结果。

现在,我希望使用rpy2。这是我在Jupyter笔记本中输入的内容:

 from rpy2.robjects.packages import importr
 base = importr('base')
 utils = importr('utils')
 te=rpackages.importr('RTransferEntropy')

我尝试仅导入前两个R软件包,并且这样做没有任何困难。但是,当尝试导入RTransferEntropy时,我收到一条冗长的错误消息,最后几行如下:

 RRuntimeError: Error in loadNamespace(name) : 
 there is no package called ‘RTransferEntropy’
 Calls: <Anonymous> ... tryCatch -> tryCatchList -> tryCatchOne -> 
 <Anonymous>

我不确定是什么引起了错误。可能是因为RTransferEntropy不在正确的目录中吗?

此外,我确实意识到存在直接在Python中使用的传递熵计算方法,例如NPEET和JIDT。但是,我一直无法成功启动它们。

1 个答案:

答案 0 :(得分:1)

谢谢。根据您的见解,我发现这可行:

R内部:.libPaths()

在Jupyter笔记本中使用生成的路径名(只有一个)来正确找到该软件包:

from rpy2.robjects.packages import importr

importr('RTransferEntropy', lib_loc="pathname")