Rpy2 в python 3.6 иногда работает, а иногда нет

#r #python-3.x #django #rpy2

#r #python-3.x #django #rpy2

Вопрос:

Я использую rpy2 для запуска своего R-скрипта в проекте django (python — 3.6), и я столкнулся со странной ошибкой. иногда весь мой код работает, а иногда r object работает NULL .Моя версия R — 4.0.3 на сервере.

 >>>>>>my import statements
import rpy2.robjects as ro
import numpy as np
import rpy2.robjects.packages as rpackages
rpackages.importr('readxl') and some more
>>>>> my code
path2script = os.path.join(settings.BASE_DIR, 'r_scripts', 'script.R')
print('txt_path>>>>>',txt_path)
ro.globalenv['args'] = ro.vectors.StrVector([txt_path])
print('ro.globalenvargs>>>>>>',ro.globalenv['args'])
r = ro.r
print('r>>>>>>>>',r)
obj = r.source(path2script)                 
print('obj>>>>>>>>>',obj)
returnarray  = np.array(obj, dtype="object")
print('returnarray',returnarray)
 

вот как выглядит мой терминал, когда мой код работает.

 txt_path>>>>> /home/ubuntu/4triangle/r_files/args.txt
ro.globalenvargs>>>>>> [1] "/home/ubuntu/4triangle/r_files/args.txt" 
r>>>>>>>> <rpy2.robjects.R object at 0x7f518ce767b8>
platform: x86_64-pc-linux-gnu
arch: x86_64
os: linux-gnu
system: x86_64, linux-gnu
 

и вот как выглядит мой терминал, когда мой код не работает.

 txt_path>>>>> /home/ubuntu/4triangle/r_files/args.txt
ro.globalenvargs>>>>>> <rpy2.rinterface_lib.sexp.NULLType object at 0x7f518f663048> [RTYPES.NILSXP]
r>>>>>>>> Error in get_data_from_rscript 'NULLType' object is not callable
 

точно в строке «ro.r» python возвращает мне сообщение об ошибке, в котором говорится,

TypeError: 'NULLType' object is not callable"

и снова через некоторое время тот же код работает без каких-либо ошибок.

Я немного смущен тем, почему r object это NULL происходит. Любая помощь будет оценена.

некоторый код из script.r выглядит следующим образом :-

 server_file_path <- "/home/ubuntu/4triangle/r_files"
setwd(server_file_path)
sp = args[1]
con=file(sp,open="r")
args=c(readLines(con)) 
file_path <- args[1]
file_name <- args[2]

main_function  <- function(){
    if(method == "stochastic"){
        FouResT.stotastic()
    }
  else if(method =="re_reserving"){
    FouResT.reserving()
  }
    else{
        FouResT.ChainLadder()
    }
}   
main_function()
 

Комментарии:

1. Возможно ли, что скрипт. R изменяется или удаляется? Попробуйте добавить оператор печати над объявлением obj, чтобы проверить, что он представляет собой объект, когда вы получаете ошибку

2. Пожалуйста, предоставьте минимально воспроизводимый пример, который включает минимально возможное содержимое script.R , которое приводит к такому поведению.

3. @EduardoMatsuoka нет, мой скрипт не модифицируется и не удаляется. это происходит за считанные секунды, например, я обновляю страницу, и код работает, а затем снова обновляю страницу, и код перестает работать. я даже очень часто сталкиваюсь с ошибкой импорта, которая гласит «Файл» /home/ubuntu/4triangle/env/lib/python3.6/site-packages/rpy2/rinterface.py «, строка 940, в _post_initr_setup сигнал.сигнал(signal. SIGINT, _sigint_handler) »

4. @krassowski я попытался добавить как можно больше деталей. просто отредактировал свой вопрос, пожалуйста, взгляните еще раз.