Hi Fabio,

Your function myrbeta returns void so assigning the output isn't going to work. Instead you need to call it like a FORTRAN subroutine. Also, I added arguments for the parameters of the beta and moved the fseedi and fseedo calls outside of the loop.

This is a pretty basic FORTRAN programming question and there are lots of books that can help you learn FORTRAN.


    subroutine mat(x,l,c,pa,pb)
    integer l,c
    double precision x(l,c), a
    integer i,j
    call fseedi()
    do j = 1, c
       do i = 1, l
         call myrbeta(x(i,j),pa,pb)
        enddo
      enddo
    call fseedo()
    end


In R call it like this:

storage.mode(x) <- "double"
.Fortran("mat", x = x, as.integer(l), as.integer(c), as.double(1), as.double(2))


Cheers,
Kjell



On 30 juin 09, at 20:02, Fabio Mathias wrote:

Thanks Mr. Barry Rowlingson

However, the matrix appears to zeros!

Notice the code below! Please!

Code in fortran

    subroutine mat(x,l,c,a)
    integer l,c
    double precision x(l,c), a
    integer i,j
     do j = 1, c
       do i = 1, l
        call fseedi()
         x(i,j) = myrbeta(a,1,2)
        call fseedo()
           enddo
          enddo
    end

In R:

dyn.load("func.so")
x <- matrix(0,5,6)
l <- nrow(x)
c <-
ncol(x)
a <- 0

..Fortran("mat", x = x, l, c, as.double(a))

Results:

$x
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    0    0    0    0    0
[2,]    0    0    0    0    0    0
[3,]    0    0    0    0    0    0
[4,]    0    0    0    0    0    0
[5,]    0    0    0    0    0    0

[[2]]
[1] 5

[[3]]
[1] 6

[[4]]
[1] 1


Thanks!!!


             Fábio Mathias Corrêa                       UFLA




____________________________________________________________________________________
[[elided Yahoo spam]]

        [[alternative HTML version deleted]]

<ATT00001.txt>

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to