在Python中使用rpy2包:用户cod未处理Rruntime错误

2024-06-02 09:03:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用rpy2包在python中创建一个r环境。我试图创建一个GLRLM的一个投资回报率,我已经从一个图像提取。我在加载程序包时遇到了一些问题,但最终还是成功了。现在运行代码时出现以下错误:

RuntimeError was unhandled by user code

在这一行:

ro.r('glrlmatrix <- radiomics:::glrlm(tissue)')

我怀疑它找不到函数“glrlm”。我试着用R运行代码,效果很好。有人知道该怎么办吗?你知道吗

tissue = pd.DataFrame(rgbRoi[...,0])
rdf= pandas2ri.py2ri(tissue)
ro.globalenv['tissue'] = rdf
radiomics=importr("radiomics",lib_loc="C:/Users/nka/Documents/R/win-library/3.3");
ro.r('tissue <- as.matrix(tissue)')
ro.r('print(dim(tissue))')
ro.r('library(radiomics)')
ro.r('glrlmatrix <- radiomics:::glrlm(tissue)')
ro.r('glrlmatrix[0,]    <- 0')                           ### Assign zero value to first row which belongs to mask region
ro.r('glrlfeature       <- array(NA,dim=c(11,1))')
ro.r('glrlfeature[1,1]  <- radiomics:::glrlm_GLN(glrlmatrix)')
ro.r('glrlfeature[2,1]  <- radiomics:::glrlm_HGLRE(glrlmatrix)')
ro.r('glrlfeature[3,1]  <- radiomics:::glrlm_LRE(glrlmatrix)')
ro.r('glrlfeature[4,1]  <- radiomics:::glrlm_LRHGLE(glrlmatrix)')
ro.r('glrlfeature[5,1]  <- radiomics:::glrlm_LRLGLE(glrlmatrix)')
ro.r('glrlfeature[6,1]  <- radiomics:::glrlm_LGLRE(glrlmatrix)')
ro.r('glrlfeature[7,1]  <- radiomics:::glrlm_RLN(glrlmatrix)')
ro.r('glrlfeature[8,1]  <- radiomics:::glrlm_RP(glrlmatrix)')
ro.r('glrlfeature[9,1]  <- radiomics:::glrlm_SRE(glrlmatrix)')
ro.r('glrlfeature[10,1] <- radiomics:::glrlm_SRHGLE(glrlmatrix)')
ro.r('glrlfeature[11,1] <- radiomics:::glrlm_SRLGLE(glrlmatrix)')
glr = ro.r.matrix(ro.r('glrlfeature'))
glr = np.array(glr)

Tags: to代码rolibraryrdfarraymatrixdim
1条回答
网友
1楼 · 发布于 2024-06-02 09:03:28

执行radiomics:::glrlm时,您正在访问命名空间radiomics中的符号glrlm,而该符号未导出(使用::仅访问导出的符号)。这应该在R中以及在用ro.r解析/计算R字符串时起作用。但是,符号通常不会由R包导出,因为它们不意味着普通用户可以直接访问。你知道吗

此外,消息RuntimeError was unhandled by user code似乎不是来自rpy2。这真的是所有关于错误的报告吗?你知道吗

除此之外,您还可以考虑将一些R字符串迁移到Python (如果您认为这有助于提高易读性):

# this is implicitly loading the R package
radiomics=importr("radiomics",
                  lib_loc="C:/Users/nka/Documents/R/win-library/3.3");
# the line below is then unnecessary because of the above
# ro.r('library(radiomics)')

# binding the symbol "tissue" in R's globalenv to the matrix conversion
# of the data frame of the same name can be written more like Python
# code:
base = importr("base")
tissue_mat = base.as_matrix(tissue)
ro.globalenv['tissue'] = tissue_mat
# the following should work, unless the R code in `radiomics::glrlm`
# cannot handle anonymous objects
glrlmatrix = radiomics.glrlm(tissue_mat)
# glrmatrix is a Python/rpy2 objects that also be used as a numpy array
# and modified in-place
# (see http://rpy2.readthedocs.io/en/version_2.8.x/numpy.html#from-rpy2-to-numpy)

相关问题 更多 >