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