large factorials
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
<ggrothendieck at 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
<ggrothendieck at 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 <sky2k2 at 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 <sky2k2 at 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 at 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 at 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 at 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.