首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用rpy2调用R包函数

用rpy2调用R包函数
EN

Stack Overflow用户
提问于 2022-05-10 19:26:33
回答 1查看 124关注 0票数 0

我是R的新手,需要将字符串数据从熊猫的dataframe传递给R中的一个函数,这个函数接受嵌套的字符串列表,例如:

代码语言:javascript
复制
> list(c("HP:0001315", "HP:0011343"), c("HP:0007164", "HP:0030810"), c( "HP:0030133", "HP:0040082"))
[[1]]
[1] "HP:0001315" "HP:0011343"

[[2]]
[1] "HP:0007164" "HP:0030810"

[[3]]
[1] "HP:0030133" "HP:0040082"  

代码

代码语言:javascript
复制
# Importing the package `ontologySimilarity`:

from rpy2.robjects.packages import importr
import rpy2.robjects as robjects
utils = importr('utils')
utils.data('hpo')
ontology_similarity = importr('ontologySimilarity')

我尝试了两种方法:

1)

代码语言:javascript
复制
lists = numbers_and_ids.HPO_ID.str.split('\t')
ontology_similarity.get_sim_grid(ontology='hpo', term_sets=lists)

这会产生KeyError: <class 'list'>错误消息。

2)

代码语言:javascript
复制
# numbers_and_ids dataframe from which the data will be taken:

data = {'dna_#': {0: '25246', 1: '29244', 2: '6409'},
        'HPO_ID': {0: 'HP:0001263\tHP:0001508\tHP:0000252\tHP:0001875\tHP:0001627', 1: 'HP:0011344\tHP:0008936\tHP:0001257\tHP:0005305\tHP:0002188\tHP:0040187\tHP:0000365\tHP:0001999', 2: 'HP:0001263\tHP:0000252\tHP:0001629\tHP:0001875\tHP:0001999'}}

numbers_and_ids = pandas.DataFrame(data}

numbers_and_ids
Out[89]:19:00
   dna_#                                             HPO_ID
0  25246  HP:0001263\tHP:0001508\tHP:0000252\tHP:0001875...
1  29244  HP:0011344\tHP:0008936\tHP:0001257\tHP:0005305...
2   6409  HP:0001263\tHP:0000252\tHP:0001629\tHP:0001875...

# Converting the data in the dataframe into tuples:

_1 = tuple(numbers_and_ids.HPO_ID.str.split('\t')[0])
_2 = tuple(numbers_and_ids.HPO_ID.str.split('\t')[1])
_3 = tuple(numbers_and_ids.HPO_ID.str.split('\t')[2])

# Creating the nested list d and calling the function:

robjects.r(f'd<-list(c{_1}, c{_2}, c{_3})')
ontology_similarity.get_sim_grid(ontology='hpo', term_sets='d')

这产生了错误消息:

代码语言:javascript
复制
rpy2.rinterface_lib.embedded.RRuntimeError: Error in (function (ontology, information_content, term_sim_method, term_sim_mat,  : 
  is.list(term_sets) & is.list(term_sets) is not TRUE

我检查了D是否是一个列表:

代码语言:javascript
复制
robjects.r(f'print(is.list(d))')

[1] TRUE
Out[92]: 
<rpy2.robjects.vectors.BoolVector object at 0x7f591524a900> [RTYPES.LGLSXP]
R classes: ('logical',)
[       1]

我希望能得到任何关于如何打电话给ontology_similarity.get_sim_grid()的建议。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-23 11:44:28

最后,我使用robjects.r从R调用R包,而不是从Python调用R,它起了作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72191997

复制
相关文章

相似问题

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