我希望通过使用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。但是,我一直无法成功启动它们。
答案 0 :(得分:1)
谢谢。根据您的见解,我发现这可行:
R内部:.libPaths()
在Jupyter笔记本中使用生成的路径名(只有一个)来正确找到该软件包:
from rpy2.robjects.packages import importr
importr('RTransferEntropy', lib_loc="pathname")