У меня проблемы с реализацией пакета Transfer Entropy из R в Python - PullRequest
1 голос
/ 20 июня 2019

Я хочу вычислить энтропию передачи в записной книжке JupyterLab, вызвав пакет RTransferEntropy R, используя rpy2, но у меня возникают проблемы при этом.

Я использую 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 Ответ

1 голос
/ 20 июня 2019

Спасибо. С вашей проницательностью я обнаружил, что это сработало:

Внутри R: .libPaths()

Полученный путь (был только один) использовался в записной книжке Jupyter для правильного определения местоположения пакета:

from rpy2.robjects.packages import importr

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