I have forgotten one line before 'chisq_test = ro.r(code)':

code = ''.join(code)


L.


Hao Fan wrote:
> Cool, I will try the new source. Thanks a lot!
> 
> 
> Hao
> 
> 
>> This will not work.
>>
>> Since the problem was fixed in the R source, what about just using it ?
>>
>> # ---
>> import urllib
>> page = 
>> urllib.urlopen("https://svn.r-project.org/R/branches/R-2-10-branch/src/library/stats/R/chisq.test.R";)
>> code = page.readlines()
>>
>> chisq_test = ro.r(code)
>>
>> # this will now work
>> # ( although not the most efficient way if larger vectors and/or a
>> # a large number of tests are made because of deparse(substitute()) )
>>
>> chisq_test(ro.FloatVector(range(100)), ro.FloatVector(range(100)))
>>
>>
>>
>>
>> L.
>>
>>
>>
>>
>> Hao Fan wrote:
>>> Hi, Laurent and list,
>>>
>>>     Thanks a lot for all the informations! I read through your 
>>> discussions at
>>> https://stat.ethz.ch/pipermail/r-devel/2009-November/055701.html So it 
>>> is a R problem not rpy.  :-)
>>> I tried to work around this problem using the following code:
>>> -----------------------------------------------------------
>>> import rpy2.robjects as robjects
>>> import math
>>>
>>> p1dist = robjects.r.c()
>>> p2dist = robjects.r.c()
>>>
>>> num = 30
>>> for i in range(num):
>>>   p1dist = robjects.r.c(p1dist, i)
>>>   p2dist = robjects.r.c(p2dist, i+1)
>>>
>>> res = robjects.r['chisq.test'](p1dist, p2dist)
>>> print(str(res.r['p.value']).split()[-1])
>>> ----------------------------------------------------------
>>>
>>> It works well. However if the input values are not integer but float, it 
>>> gives similar errors.
>>> -------------------------------------------------------------
>>> import rpy2.robjects as robjects
>>> import math
>>>
>>> p1dist = robjects.r.c()
>>> p2dist = robjects.r.c()
>>>
>>> num = 30
>>> for i in range(num):
>>>   tmp1 = i * 0.1 + 0.01
>>>   tmp2 = i * 0.1 + 0.05
>>>   p1dist = robjects.r.c(p1dist, tmp1)
>>>   p2dist = robjects.r.c(p2dist, tmp2)
>>>
>>> res = robjects.r['chisq.test'](p1dist, p2dist)
>>> print(str(res.r['p.value']).split()[-1])
>>> -------------------------------------------------------
>>> File "/usr/lib64/python2.6/site-packages/rpy2/robjects/__init__.py", 
>>> line 422, in __call__
>>>     res = super(RFunction, self).__call__(*new_args, **new_kwargs)
>>> rinterface.RRuntimeError: Error in names(dimnames(x)) <- DNAME :
>>>   'names' attribute [6] must be the same length as the vector [2]
>>>
>>> I would like to try what you suggested - bind the values to a symbol in 
>>> an environment. Could you please point me to an example? I didn't find 
>>> such a case in the R or rpy manual.
>>> (there is sth like the follows, but I tried sth similar and not work)
>>>
>>>>>>  robjects.r('pi')  +  2
>>> c(3.14159265358979, 2)
>>>>>>  robjects.r('pi')[0]  +  2
>>> 5.1415926535897931
>>>
>>> Thanks!
>>>
>>>
>>> Hao
>>>
>>>> This is odd.
>>>> When looking at what is happening, the problem is likely rooted in
>>>> the use of deparse(substitute(x)) and deparse(substitute(y)) in the code
>>>> for chisq.test.
>>>>
>>>> This is what is happening:
>>>>
>>>>>>> f = robjects.r('''function(x) return(deparse(substitute(x)))''')
>>>>>>> tuple(f(robjects.FloatVector(range(17))))
>>>> ('c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)',)
>>>>>>> tuple(f(robjects.FloatVector(range(18))))
>>>> ('c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17', ')')
>>>>
>>>> deparse(substitute()) starts splitting the output into several elements.
>>>>
>>>> R allows the use of anonymous objects, but when created at the C level
>>>> some functions appear to break. I am currently seeing this as a 
>>>> potential problem with R.
>>>>
>>>> One workaround is to bind your objects to a symbol in a given 
>>>> environment, and call the chisq.test on them.
>>>> Not so elegant, but I do not think of an other temporary solution.
>>>>
>>>>
>>>> L.
>>>>
>>>>
>>>>
>>>> Hao Fan wrote:
>>>>> Hi, List and Laurent,
>>>>>
>>>>>     For the chisq function I tried to used through rpy2, I just did 
>>>>> more test with the exact code as follows:
>>>>> ----------------------------------------------
>>>>> import rpy2.robjects as robjects
>>>>>
>>>>> p1dist = []
>>>>> p2dist = []
>>>>> num = 17
>>>>> for x in range(num):
>>>>>   p1dist.append(x)
>>>>>   p2dist.append(x-1)
>>>>>
>>>>> print p1dist
>>>>> print p2dist
>>>>> rp1dist = robjects.FloatVector(p1dist)
>>>>> rp2dist = robjects.FloatVector(p2dist)
>>>>>
>>>>> res = robjects.r['chisq.test'](rp1dist, rp2dist)
>>>>> print(str(res.r['p.value']).split()[-1])
>>>>> -----------------------------------------------------
>>>>>
>>>>> When I set num to 17, it works
>>>>> "Warning message: In function (x, y = NULL, correct = TRUE, p = 
>>>>> rep(1/length(x), length(x)),  :
>>>>>   Chi-squared approximation may be incorrect
>>>>> 0.2350833"
>>>>>
>>>>> However, if I set num to 18 (add one more element to the two vectors 
>>>>> to be compared by chisq.test), it doesn't work.
>>>>> The error message is similar to my previous post:
>>>>> File "/usr/lib64/python2.6/site-packages/rpy2/robjects/__init__.py", 
>>>>> line 422, in __call__
>>>>>     res = super(RFunction, self).__call__(*new_args, **new_kwargs)
>>>>> rinterface.RRuntimeError: Error in names(dimnames(x)) <- DNAME :
>>>>>   'names' attribute [4] must be the same length as the vector [2]
>>>>>
>>>>> Could this mean that rpy2 doesn't take a long vector or I made some 
>>>>> stupid mistake?
>>>>>
>>>>> Thanks!
>>>>>
>>>>>
>>>>> Hao
>>>>>> Hi Hao,
>>>>>>
>>>>>> The exact example that triggers the error may matter.
>>>>>>
>>>>>> I just tried the following with rpy2-2.1dev and it worked.
>>>>>>
>>>>>> x = robjects.FloatVector((1,2,3))
>>>>>> y = robjects.FloatVector((2,3,4))
>>>>>>
>>>>>> res = robjects.r['chisq.test'](x, y)
>>>>>>
>>>>>> I only get the following
>>>>>> Warning message:
>>>>>> In function (x, y = NULL, correct = TRUE, p = rep(1/length(x), 
>>>>>> length(x)),  :
>>>>>>   Chi-squared approximation may be incorrect
>>>>>>
>>>>>> L.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hao Fan wrote:
>>>>>>> Hi, list
>>>>>>>
>>>>>>>      I would like to calculate the fitness of two histograms, so I 
>>>>>>> tried to use the chisq.test() in R through rpy2.
>>>>>>> The python code I have is as follows:
>>>>>>> -------------------
>>>>>>> import rpy2.robjects as robjects
>>>>>>>
>>>>>>> p1dist = [X1, X2, ... Xm]
>>>>>>> p2dist = [Y1, Y2, ... Ym]
>>>>>>>
>>>>>>> rp1dist = robjects.FloatVector(p1dist)
>>>>>>> rp2dist = robjects.FloatVector(p2dist)
>>>>>>>
>>>>>>> robjects.r['chisq.test'](rp1dist, rp2dist)
>>>>>>> -------------------
>>>>>>>
>>>>>>>    Then I got the following error:
>>>>>>> File 
>>>>>>> "/usr/lib64/python2.6/site-packages/rpy2/robjects/__init__.py", in 
>>>>>>> __call__
>>>>>>>      res = super(RFunction, self).__call__(*new_args, **new_kwargs)
>>>>>>> rinterface.RRuntimeError: Error in names(dimnames(x)) <- DNAME :
>>>>>>>    'names' attribute [62] must be the same length as the vector [2]
>>>>>>>
>>>>>>>
>>>>>>>    I also tried rpy_classic, so my code change to the follows:
>>>>>>> --------------------
>>>>>>> import rpy2.robjects as robjects
>>>>>>> import rpy2.rpy_classic as rpy
>>>>>>> rpy.set_default_mode(rpy.NO_CONVERSION)
>>>>>>>
>>>>>>> p1dist = [X1, X2, ... Xm]
>>>>>>> p2dist = [Y1, Y2, ... Ym]
>>>>>>>
>>>>>>> rp1dist = robjects.FloatVector(p1dist)
>>>>>>> rp2dist = robjects.FloatVector(p2dist)
>>>>>>>
>>>>>>> robjects.r['chisq.test'](rp1dist, rp2dist)
>>>>>>> -----------------
>>>>>>>
>>>>>>>    Then I got similar error:
>>>>>>> File "/usr/lib64/python2.6/site-packages/rpy2/rpy_classic.py", line 
>>>>>>> 214, in __call__
>>>>>>>      res = self.__sexp(*args_r, **kwargs_r)
>>>>>>> rinterface.RRuntimeError: Error in names(dimnames(x)) <- DNAME :
>>>>>>>    'names' attribute [62] must be the same length as the vector [2]
>>>>>>>
>>>>>>>
>>>>>>>     I feel this problem is due to my wrong use of the R vector, but 
>>>>>>> I can not find it. Any hints will be mostly appreciated!
>>>>>>> Thanks a lot in advance!
>>>>>>>
>>>>>>>
>>>>>>> Hao
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>
>>


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
rpy-list mailing list
rpy-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rpy-list

Reply via email to