首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用rpy2包:用户代码未处理运行时错误

在Python中使用rpy2包:用户代码未处理运行时错误
EN

Stack Overflow用户
提问于 2016-11-24 19:43:17
回答 1查看 156关注 0票数 0

我正在尝试使用rpy2包在python中创建一个r环境。我正在尝试创建一个从图像中提取的ROI的GLRLM。我在加载包时遇到了一些问题,但我最终还是设法做到了。现在,我在运行代码时得到以下错误:

RuntimeError was unhandled by user code

在这一行中:

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

我怀疑它找不到函数"glrlm“。我尝试在R中运行代码,它工作得很好。有谁知道该怎么做吗?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2016-11-25 00:19:20

执行radiomics:::glrlm时,在未导出的情况下访问名称空间radiomics中的symbol glrlm (使用::仅访问导出的符号)。当使用ro.r解析/计算R字符串时,这应该可以在R中工作。但是,符号通常不会由R包导出,因为它们不意味着普通用户可以直接访问。

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

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

代码语言:javascript
复制
# 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40785536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档