首页 > 解决方案 > R 捕获段错误地址 0xc,导致“内存未映射”

问题描述

我试图在 Python 中调用一个函数,该函数使用 R through 中的函数rpy2,而后者又通过rcdk. R 函数接受一个描述分子结构的字符串并输出一个描述其化学性质的数字对象:

get_descriptors <- function(smiles){
mol <- rcdk::parse.smiles(smiles)
dnames <- rcdk::get.desc.names()
descs <- rcdk::eval.desc(mol, dnames, verbose=FALSE)
return(as.numeric(descs))
}

Python 函数本质上是将上述函数的输出传递到一个列表中。调用此函数后,我得到:

R[write to console]: 
*** caught segfault ***

R[write to console]: address 0xc, cause 'memory not mapped'

R[write to console]: 
Traceback:

R[write to console]:  1: 
R[write to console]: .jcall(desc, "Lorg/openscience/cdk/qsar/DescriptorValue;", "calculate", 
R[write to console]:     a, check = check)
R[write to console]: 

R[write to console]:  2: 
R[write to console]: tryCatchList(expr, classes, parentenv, handlers)
R[write to console]: 

R[write to console]:  3: 
R[write to console]: tryCatch({
R[write to console]:     .jcall(desc, "Lorg/openscience/cdk/qsar/DescriptorValue;", 
R[write to console]:         "calculate", a, check = check)
R[write to console]: })
R[write to console]: 

R[write to console]:  4: 
R[write to console]: FUN(X[[i]], ...)
R[write to console]: 

R[write to console]:  5: 
R[write to console]: lapply(molecules, function(a, check) {
R[write to console]:     val <- tryCatch({
R[write to console]:         .jcall(desc, "Lorg/openscience/cdk/qsar/DescriptorValue;", 
R[write to console]:             "calculate", a, check = check)
R[write to console]:     })
R[write to console]: }, check = FALSE)
R[write to console]: 

R[write to console]:  6: 
R[write to console]: rcdk::eval.desc(mol, dnames, verbose = FALSE)
R[write to console]: 

R[write to console]:  7: 
R[write to console]: (function (smiles, type) 
R[write to console]: {
R[write to console]:     mol <- rcdk::parse.smiles(smiles)
R[write to console]:     dnames <- rcdk::get.desc.names()
R[write to console]:     descs <- rcdk::eval.desc(mol, dnames, verbose = FALSE)
R[write to console]:     return(as.numeric(descs))
R[write to console]: })("O=[N+]([O-])c1ccc2ccc3cccc4ccc1c2c34")
R[write to console]: 

在 R 中逐行运行该函数会给出没有错误的预期输出,所以我不确定错误是访问 CDK 失败,尽管我可能是错的。

我已经检查了我在 R 和 Python 中安装了所有必要的依赖项。我正在使用 Python 3.8.3,这是我的 R 会话信息:

version  R version 4.0.4 (2021-02-15)
os       macOS Catalina 10.15.3      
system   x86_64, darwin17.0

如果需要,很乐意提供更多信息。

标签: pythonrsegmentation-fault

解决方案


推荐阅读