.Fortran()
kullanarak R'den aradığım uzun bir kalıtımsal FORTRAN77 kod parçam var. Fortran kodu bir dizi alt yordam içerir ve bir Fortran programına gömüldüğünde çalışır ve sonradan derlenir ve komut satırından çalıştırılır. Ancak, onu R'den aradığımda, i fonksiyonu çağıracağım ikinci kez R çöküyor.Hata ayıklama Fortran kodu içinde R
Fortran kodu, değişken olarak depolanan çok sayıda dizin ve dizi boyutu kullandıkça, orada bir şeyler yanlış gidildiğini düşünüyorum. Bir noktada, Fortran kodu olması gereken yerde bellekte bir yere bakıyor. Bu yüzden Fortran koduna adım atmalı ve R'den gelenlerin benim düşündüğüm şey olup olmadığını kontrol etmeliyim ve kod benim düşündüğüm şeyi yapar.
Eğer bir R işlevi olurdu, debug()
kullanarak, browser()
ifadeleri ekleyerek ve kodda bir noktada görmek istediğiniz herhangi bir değeri basmayı seçebilirim. Ama Fortran kodu bana bu şeylerden herhangi birini afaik izin vermez. Eğer doğru anladıysam, Fortran'ın ekran çıktısı R tarafından yakalanmayan argümanların türünü ve değerini tam olarak nasıl kontrol edebildiğime dair herhangi bir fikriniz var. Daha sonra R'den çağrıldığında bu kodu nasıl ayıklayabileceğimi açıklayabilirseniz, bu harika olur.
İşte ne demek istediğimi göstermek için bir örnek.
C An example program
C
PROGRAM EXAMPLE
INTEGER N
PARAMETER (N=10)
REAL X0, X(N),MEAN
C
X0 = 14
DO 10 I = 1,10
FI = FLOAT(I)
X(I) = X0 + FI
10 CONTINUE
CALL MYSUB(X0,MEAN)
END
C
C Mysub the subroutine
C
SUBROUTINE MYSUB(X,N,MEAN)
INTEGER N
REAL X(N), MEAN
MEAN = 0
DO 20 I = 1,N
MEAN = MEAN + X(I)
20 CONTINUE
MEAN = MEAN/N
RETURN
END
Ben R altprogram MySub aramak istediğiniz Say ve ben doğru X ve N olsun emin olmak istiyorum. Eğer sadece 2 argümanlar yerine mysub tanımına bulunan 3 ile mysub diyoruz senin örneğin programında
mysub <- function(x){
if(!is.vector(x) | is.numeric(x)) stop("X has to be a numeric vector")
n <- length(x)
res <- .Fortran('mysub',X=as.single(x), N=as.integer(n), MEAN=single(1))
return(res$MEAN)
}
Çok önemsiz bir soru, ama neden Fortran alt programına giren miktarları ekrana dökmek yerine dosyaya yazmıyorsunuz? Bu şekilde, en azından R ve Fortran arasındaki iletişimin doğru şekilde çalışıp çalışmadığını kontrol edebilirsiniz. –
@ BálintAradi Kendimi aptal hissediyorum ... ;-) Thx. –
Hey, en iyi soruların basit görünümlü cevapları var :-) –