One more improvement. Perhaps it would be best just to return a numeric so sum1 inputs and outputs numerics:
library(rSymPy) # define factorial to return a Sym object factorial.Sym <- function(n) Sym("factorial(", n, ")") sum1 <- function(l,u,t,i,n,w) { v <- 0 for (m in 0 :w) { v1 <- ((u^(1/2))*(l^(1/2))*t)^(i-n+2*m) v2 <- (factorial.Sym(i-n+m))*(factorial.Sym(m)) v3 <- v1/v2 v <- v+v3 } as.numeric(sympy(v)) # send it to SymPy, make result a Sym obj } s <- sum1(1,2,10,80,3,80) s # numeric On Thu, Apr 23, 2009 at 10:44 AM, Gabor Grothendieck <ggrothendi...@gmail.com> wrote: > The code in my prior post works (except one comment was wrong) > but try this instead. The only change is the last line of the sum1 > function. This way it produces a Sym object rather than a character > string. > > library(rSymPy) > > # define factorial to return a Sym object > factorial.Sym <- function(n) Sym("factorial(", n, ")") > > sum1 <- function(l,u,t,i,n,w) { > v <- 0 > for (m in 0 :w) { > v1 <- ((u^(1/2))*(l^(1/2))*t)^(i-n+2*m) > v2 <- (factorial.Sym(i-n+m))*(factorial.Sym(m)) > v3 <- v1/v2 > v <- v+v3 > } > Sym(sympy(v)) # send it to SymPy, make result a Sym obj > } > > s <- sum1(1,2,10,80,3,80) > s # Sym > as.numeric(s) # numeric > > > On Thu, Apr 23, 2009 at 10:37 AM, Gabor Grothendieck > <ggrothendi...@gmail.com> wrote: >> sympy() returns a character string, not an R numeric -- it shouldn't >> automatically return an R numeric since R can't represent all >> the numbers that sympy can. >> >> The development version of rSymPy has a second class which >> produces objects of class c("Sym", "character") and those >> can be manipulated with +, -, *, / producing other Sym >> objects so try this: >> >> >> library(rSymPy) >> >> # next line pulls in code to handle Sym objects >> source("http://rsympy.googlecode.com/svn/trunk/R/Sym.R") >> >> # define factorial to return a Sym object >> factorial.Sym <- function(n) Sym("factorial(", n, ")") >> >> sum1 <- function(l,u,t,i,n,w) { >> v <- 0 >> for (m in 0 :w) { >> v1 <- ((u^(1/2))*(l^(1/2))*t)^(i-n+2*m) >> v2 <- (factorial.Sym(i-n+m))*(factorial.Sym(m)) >> v3 <- v1/v2 >> v <- v+v3 >> } >> sympy(v) >> } >> >> s <- sum1(1,2,10,80,3,80) >> s # Sym object >> as.numeric(s) # numeric >> >> >> On Thu, Apr 23, 2009 at 10:00 AM, molinar <sky...@hotmail.com> wrote: >>> >>> Here is what I did: >>> library(rSymPy) >>> factorial.sympy <- function(n) sympy(paste("factorial(", n, ")")) >>> factorial.sympy(171) >>> [1] >>> "1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000" >>>> >>> Which work perfectly. >>> >>> Here is one of my summation functions: >>> >>> sum1 <- function(l,u,t,i,n,w) { >>> + v <- 0 >>> + for (m in 0 :w) { >>> + v1 <- ((u^(1/2))*(l^(1/2))*t)^(i-n+2*m) >>> + v2 <- (factorial.sympy(i-n+m))*(factorial.sympy(m)) >>> + v3 <- v1/v2 >>> + v <- v+v3 >>> + } >>> + return(v) >>> + } >>> >>> sum1(1,2,10,80,3,80) >>> Error in (factorial.sympy(i - n + m)) * (factorial.sympy(m)) : >>> non-numeric argument to binary operator >>> >>> I'm not sure why it works when I do the factorial normally but when I call >>> my function it doesn't work? >>> >>> >>> >>> >>> >>> >>> >>> molinar wrote: >>>> >>>> Thank you everyone all of your posts were very helpful. I tried each one >>>> and I think I have about 10 new packages installed. The formula I need to >>>> calculate did not involve any logarithms but infinite summations of >>>> factorials, I'm sorry for not specifying. I read some things about using >>>> logarithms but I thought in my case I would have to do an e to the log and >>>> by doing that R still gave me the same problems with numbers over 170. >>>> >>>> But I was able to get it to work by using the last post about the rsympy >>>> packages. >>>> >>>> I tried downloading bc but I didn't know how to connect it to R, so R said >>>> "could not find function bc". >>>> >>>> Thanks again for all of your help. >>>> Samantha >>>> >>>> >>>> >>>> >>>> >>>> Gabor Grothendieck wrote: >>>>> >>>>> Also the R sympy package can handle this: >>>>> >>>>>> library(rSymPy) >>>>> Loading required package: rJava >>>>> >>>>>> factorial.sympy <- function(n) sympy(paste("factorial(", n, ")")) >>>>> >>>>>> # note that first time sympy is called it loads java, jython and sympy >>>>>> # but on subsequent calls its faster. So make a dummy call first. >>>>>> factorial.sympy(10) >>>>> [1] "3628800" >>>>> >>>>>> # code from earlier post defining factorial.bc to be inserted here >>>>> >>>>>> benchmark(replications=10, columns=c('test', 'elapsed'), >>>>> + bc=factorial.bc(500), >>>>> + sympy = factorial.sympy(500)) >>>>> test elapsed >>>>> 1 bc 2.17 >>>>> 2 sympy 0.09 >>>>> >>>>> See the rSymPy, r-bc and rbenchmark home pages: >>>>> http://rsympy.googlecode.com >>>>> http://r-bc.googlecode.com >>>>> http://rbenchmark.googlecode.com >>>>> >>>>> On Wed, Apr 22, 2009 at 3:21 PM, molinar <sky...@hotmail.com> wrote: >>>>>> >>>>>> I am working on a project that requires me to do very large factorial >>>>>> evaluations. On R the built in factorial function and the one I created >>>>>> both are not able to do factorials over 170. The first gives an error >>>>>> and >>>>>> mine return Inf. >>>>>> >>>>>> Is there a way to have R do these larger calculations (the calculator in >>>>>> accessories can do 10000 factorial and Maple can do even larger) >>>>>> -- >>>>>> View this message in context: >>>>>> http://www.nabble.com/large-factorials-tp23175816p23175816.html >>>>>> Sent from the R help mailing list archive at Nabble.com. >>>>>> >>>>>> ______________________________________________ >>>>>> R-help@r-project.org mailing list >>>>>> https://stat.ethz.ch/mailman/listinfo/r-help >>>>>> PLEASE do read the posting guide >>>>>> http://www.R-project.org/posting-guide.html >>>>>> and provide commented, minimal, self-contained, reproducible code. >>>>>> >>>>> >>>>> ______________________________________________ >>>>> R-help@r-project.org mailing list >>>>> https://stat.ethz.ch/mailman/listinfo/r-help >>>>> PLEASE do read the posting guide >>>>> http://www.R-project.org/posting-guide.html >>>>> and provide commented, minimal, self-contained, reproducible code. >>>>> >>>>> >>>> >>>> >>> >>> -- >>> View this message in context: >>> http://www.nabble.com/large-factorials-tp23175816p23197344.html >>> Sent from the R help mailing list archive at Nabble.com. >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >>> >> > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.