0

私はここで同様の質問を見つけましが、自分のデータに対してそれを行う方法を理解できないようです。

私は Python でフロートのリストのセットを持っています (実際には、各リストの長さは約 1,000 フロートです)。例えば

[0.01,0.02,0.03,0.04,0.05]
[0.1,0.2,0.4,0.5,0.6,0.7]
[0.01,0.2,0.05,0.4]

リストごとに、Python リストを R リストに変換し、R リストに対して FDR テストを実行して Q 値のリストを取得し、Q 値の R リストを Python リストに変換してから続行します。私のスクリプトで。

私が持っているコード:

for each_list in SetOfLists:
    ro.r("library('devtools')") #load necessary package for task 
    ro.r("library('qvalue')")   #load necessary package for task
    pvals = ro.FloatVector(each_list)  #explain that each list is a set of floats 
    print ro.r("qobj <-qvalue(p=" + pvals + ")") #run the r function on each list
    #ro.r("qobj$lfdr") #get the FDR values from the R output                                                                                                                                                   
    #Then convert this list of FDR values back to python  

この行に問題があります:

print ro.r("qobj <-qvalue(p=" + pvals + ")")

たとえば、その行を作成すると:

  print ro.r("qobj <-qvalue(p=" + pvals + ")")

エラーは次のとおりです。

> Traceback (most recent call last):   File "CalculateFDR.py", line 33,
> in <module>
>     print ro.r("qobj <-qvalue(p=" + pvals + ")") TypeError: cannot concatenate 'str' and 'FloatVector' objects

行を少し変更すると:

print ro.r("qobj <-qvalue(p= pvals)")

エラーは次のとおりです。

  res = super(Function, self).__call__(*new_args, **new_kwargs)
Traceback (most recent call last):
  File "CalculateFDR.py", line 33, in <module>
    print ro.r("qobj <-qvalue(p=pvals)")
  File "/home/nis/aoife/env/local/lib/python2.7/site-packages/rpy2/robjects/__init__.py", line 321, in __call__
    res = self.eval(p)
  File "/home/nis/aoife/env/local/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 178, in __call__
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
  File "/home/nis/aoife/env/local/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 106, in __call__
    res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in qvalue(p = pvals) : object 'pvals' not found

問題は、python リストを R リストに適切に変換していないことです。これを正しく行う方法がわかりません。したがって、アドバイスをいただければ幸いです。

4

1 に答える 1

0

これが他の誰かを助ける場合に備えて、答えは次のとおりです。

devtools = importr("devtools")
qvalue = importr("qvalue")

for each_list in SetOfLists:
    pvals = ro.FloatVector(v)
    rcode = 'qobj <-qvalue(p=%s)' %(pvals.r_repr())
    res = ro.r(rcode)
    r_output1 = 'qobj$pvalue'
    r_output2 = 'qobj$qvalue'
    r_pvalue = ro.r(r_output1)
    r_qvalue = ro.r(r_output2)
    DictOfValues = dict(zip(r_pvalue,r_qvalue))

これは、Python リストを R に取得するためのコードです。

于 2017-01-12T11:26:30.290 に答える