* ... in the same vector. On Dec 3, 2015, at 10:48 AM, Boris Steipe <boris.ste...@utoronto.ca> wrote:
> It's very commendable that you try writing your own functions to learn R. Of > course the function factorize() is in gmp, but that's beside the point. > > Your code looks messy - before asking your question you could have removed > all these print statements. It gets further messed up because you posted in > HTML. The logic is awkward. Instead of returning from the inside of an > infinite loop in spaghetti code fashion, write your loop to test for your > termination condition. Use "<-" and "=" consistently! Don't write return (), > but keep parentheses attached to their functions. "if( isprime(n) ){ > return(n)}" is enough for your first test. DRY (Do not repeat yourself). > Whenever you find yourself writing essentially the same code in different > places of your function, your logic is almost always wrong (you have three > different places where you append to your prime list). > > But, funny enough, that's not actually the source of your problem. The > problem is: you are using the gmp function nextprime(), which - although it > doesn't say so in it's help page - returns a big integer of class bigz. > > str(nextprime(2)) > > The problem is you can't mix integers and big integers in the same list. > > c(nextprime(2), nextprime(3)) > c(27, nextprime(2), nextprime(3)) > > So keep it all as plain integers: > currentPrime = as.integer(nextprime(currentPrime)) > > ... and it will work as expected. > But do clean it up. > > > B. > > PS: > factorize(18) > Big Integer ('bigz') object of length 3: > [1] 2 3 3 > > ... > > > On Dec 3, 2015, at 6:42 AM, Kevin Wright <wrightkevin3...@gmail.com> wrote: > >> Hi, >> >> I am very new to 'R' and am trying to write an R function which returns the >> prime factors of a given number(n) >> >> Unfortunately, the function only works for very small numbers, if for >> example I pass 18 to the function >> a mysteriously long vector is returned. I have not been able to find where >> or why this is happening. >> I know I've done something wrong. I've tried using debugging statements. >> Sometimes the >> currentPrime variable seems to become some sort of array?! >> >> >> can you help? >> >> >> library(gmp) >> >> >> #passing 18 returns: 2 1 0 0 0 1 0 0 0 1 0 0 0 3 0 0 0 1 0 0 0 1 0 0 0 1 0 >> 0 0 3 0 0 0 >> # expected: 2 3 3 >> getPrimeFactors = function(n){ >> primeList <- c() >> >> if( isprime(n) ){ >> primeList <- append(primeList,n) >> return (primeList) >> } >> >> currentPrime <- 2 >> >> while(TRUE){ >> # Check if input is divisible by the current prime >> if(n %% currentPrime == 0){ >> cat(sprintf("the number %f is divisible by %f\n", n, >> currentPrime)) >> n = n%/%currentPrime >> >> cat(sprintf("value of n is %f\n", n)) >> >> cat(sprintf("current prime :%f\n", currentPrime)) >> primeList = append(primeList,currentPrime) >> # print(c("list contents:", primeList)) >> >> >> currentPrime = 2 >> >> if( isprime(n)){ >> >> primeList = append(primeList, n) >> return (primeList) >> >> } >> >> } >> else{ >> cat(sprintf("the number %f is NOT divisible by %f\n", n, >> currentPrime)) >> #cat(sprintf("current prime before is: %f\n", currentPrime)) >> #print(c("current prime before:", currentPrime)) >> currentPrime = nextprime(currentPrime) >> #cat(sprintf("current prime after is: %f\n", currentPrime)) >> #print(c("current prime after:", currentPrime)) >> >> } >> >> >> >> } >> >> >> >> >> } >> >> >> >> >> >> >> } >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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 -- To UNSUBSCRIBE and more, see > 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 -- To UNSUBSCRIBE and more, see 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.