Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Rpy-python中应用库VCD的R函数Assocstats_Python_R_Rpy2 - Fatal编程技术网

如何在Rpy-python中应用库VCD的R函数Assocstats

如何在Rpy-python中应用库VCD的R函数Assocstats,python,r,rpy2,Python,R,Rpy2,我正在尝试使用python的Rpy模块计算统计参数phi系数、Cramer V和接触系数。在R中,我能够做到这一点,但在python中复制相同内容的尝试中,我束手无策 Library(vcd) data <- read.csv("test.csv") assocstats(table(data$var_4, data$target) Output X^2 df P(> X^2) Likelihood Ratio 113.28 1

我正在尝试使用python的Rpy模块计算统计参数phi系数、Cramer V和接触系数。在R中,我能够做到这一点,但在python中复制相同内容的尝试中,我束手无策

Library(vcd)
data <- read.csv("test.csv")
assocstats(table(data$var_4, data$target)

Output     
                X^2 df P(> X^2)
Likelihood Ratio 113.28  1        0
Pearson          112.51  1        0

Phi-Coefficient   : 0.15 
Contingency Coeff.: 0.148 
Cramer's V        : 0.15 
from Rpy import r
# Already connected with mysql
q="Select var_4 , target from test"
cur.execute(q)
data=cur.fetchall()
ls1=[]
ls2=[]
for i in range(len(data)):
  ls1.append(data[i][0])
  ls2.append(data[i][1])
rpy.r.library("vcd")
rpy.r.assocstats(rpy.r.table(ls1,ls2))
错误:

Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
rpy.r.assocstats(rpy.r.table(ls1,ls2))
RPy_RException: Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
rpy.r.assocstats(rpy.r.table(ls1,ls2))
RPy_RException:sort.list(y)中出错:'x'必须是'sort.list'的原子
你在名单上打过“排序”吗?
我尝试的另一种方法是从scipy模块计算phi sq,然后使用数学公式计算cramer的v等。但我打算在我的项目中大量使用Rpy。我非常感谢您能在上述方法中指出问题。我想我无法在公式中以正确的格式传递输入
提前感谢

从错误中我们可以看到,
排序
函数在
列表
输入方面存在问题。测试此案例以获取示例列表

templist<-list(c(3,2,1))
> sort(templist)
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : 
  'x' must be atomic

newlist<-unlist(templist)
>is.atomic(newlist)
[1] TRUE

> sort(newlist)
[1] 1 2 3
templast排序(templast)
sort.int(x,na.last=na.last,递减=递减,…)中出错:
“x”必须是原子的
原子(newlist)
[1] 真的
>排序(新列表)
[1] 1 2 3
这里的键是
unlist
,您可以使用
rpy.r.is.list
确认您的输入
ls1
ls2
是否是
list
。要取消列出它们,需要在
ls1
ls2
上调用
rpy.r.unlist

要能够使用函数名中带有
的函数,例如
is.list()
,您可以参考()


我没有rpy,因此无法确认,但我认为这应该有效,让我们知道。

您是否真的在使用标签中所述的
rpy2
?在我看来是
rpy
。无论如何,我强烈建议您迁移到
rpy2
,如果您还没有这样做的话

看起来您的
ls1
ls2
只是数字列表,问题应该很简单:

In [60]:
#setting up
import rpy2.robjects as ro
mydata = ro.r['data.frame']
table = ro.r['table']
assocstats = ro.r['assocstats']
summary = ro.r['summary']
ro.r['library']('vcd')
ls1=np.random.random(50)
ls2=np.random.random(50)
result=assocstats(table(ls1, ls2))

In [61]:
#what is in the result
print result.names
[1] "table"       "chisq_tests" "phi"         "contingency" "cramer"     

In [62]:
#access the chi-sqaure table
print result.rx('chisq_tests')
$chisq_tests
                       X^2   df  P(> X^2)
Likelihood Ratio  391.2023 2401 1.0000000
Pearson          2450.0000 2401 0.2382456

谢谢。现在我面临一个新的错误。我正在努力解决这个问题。我会让你知道事情的进展。错误:回溯(最近一次调用上次):文件“”,第1行,在r.assocstats(r.table(newls1,newls2))rpyrexception:函数(x)中的错误:函数仅为双向表定义。这正是我想要的。让我安装rpy2并进行测试。如果我遇到任何麻烦,我会让你知道的。多谢你的努力。我唯一需要更改的是取消列出python中的列表。