python - 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
如果需要,很乐意提供更多信息。
解决方案
推荐阅读
- python - 如何根据前一个相同的图形创建两个不同的图形?
- wcf - WCF 服务失败 由于终结点地址处的服务对该地址的协议不可用,因此无法分派消息
- docker - 当 HyperV 开启时,Vagrant 冻结 SSH 连接
- javascript - 让所有 websocket 使用 javascript 接收数据
- c# - C# EFCORE 在 SQLITE 中使用两个主键(复合键)
- python - 尝试在 Django 中创建以下关系时出现 ValueError
- ffmpeg - 以 MPEG-dash 格式更改最大缓冲区长度
- mql4 - 使用 mql4 语言编码支持/阻力
- python - 在 Google Cloud App Engine 上部署 RAM 密集型应用程序?
- c# - 基于索引顺序合并行 U-SQL