このようなものをインターネットで検索するのに数日を費やした後でも、この問題を説明するものを見つけることができませんでした. (それ以外の場合は非常にお勧めします)「Writing R Extensions」を読んでも、解決策は得られません。したがって、これが私の最も緊急の質問です。
.Fortran(...) 呼び出しを介して関数/サブルーチンパラメーターとして Fortran に関数を渡すことは可能ですか?
これをテストするために 2 つの単純な関数を作成しました。最初は 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
上記の関数に渡す単純な R 関数:
asdf <- function(a, s, d, f){x <- c(a, s, d, f)}
yield を呼び出して " .Fortran("foo", asdf, vector(mode="numeric", length=22))
asdf
Error: invalid mode (closure) to pass to Fortran (arg 1)
" (文字列として) を渡すと、引数が期待される型 (つまり、関数) に明らかに適合しないため、segfault が発生します。
参考までに、コードが意味のあることをすることは期待していません(それは別の関数のタスクになります)。主に知りたいのは、Rから関数(または関数ポインター)を渡すことがまったく可能かどうか、または与えるほうがよいかどうかですすぐにこのアプローチに取り組み、うまくいく可能性のあるものを探してください。
前もって感謝します、
ディーン