花费了几天的时间在网上搜索这样的东西之后,我仍然找不到任何描述这个问题的东西。阅读(另外很值得推荐的)'写作R扩展'也不会提供解决方案。因此,这是我最紧迫的问题:在R中传递函数作为.Fortran参数
是否可以通过.Fortran()函数将函数(为简单起见,假设一个简单的R函数 - 实际上,问题甚至更丑)作为函数/子程序参数传递给Fortran。 ..)电话 - 如果是这样,怎么办?
subroutine foo(o, x)
implicit none
interface
subroutine o(t, y, param, f)
double precision, intent(in) :: t
double precision, dimension(58), intent(in) :: y, param
double precision, dimension(22), intent(out) :: f
end subroutine
end interface
double precision, dimension(22), intent(out) :: x
double precision, dimension(58) :: yt, paramt
integer :: i
do i = 1, 58
yt(i) = rand(0)
paramt(i) = rand(1)
end do
call o(dble(4.2), yt, paramt, x)
end subroutine
和a:
我为了测试这一点,首先一个Fortran子程序(适合于使用我原先打算通过的功能,从而在界面处的有点奇怪的尺寸)写了两个简单的功能简易R函数传递给上述功能:
asdf <- function(a, s, d, f){x <- c(a, s, d, f)}
调用.Fortran("foo", asdf, vector(mode="numeric", length=22))
产量 Error: invalid mode (closure) to pass to Fortran (arg 1)
和传递“ASDF”(字符串)导致段错误,作为参数明显不适合预期类型(即功能)。我不希望代码做任何有意义的事(这将是另一个函数的任务),我主要想知道,是否可以根据R传递函数(或函数指针),或者我更好地立即放弃这种方法,并寻找可能有用的东西。
由于提前,
院长
所以,一个函数被视为R中的一个对象? – DStevens 2012-07-24 13:14:22
是的,一个SEXP对象,例如在Rcpp中,我们可以很容易地传递一个函数。 – 2012-07-24 13:15:30
@DirkEddelbuettel:你有任何花哨的Rcpp来处理调用Fortran的东西,还是Fortran在Rcpp的土地上用C来表达? ;-) – 2012-07-24 13:19:49