के भीतर से डीबग फोरट्रान कोड मेरे पास विरासत FORTRAN77 कोड का एक लंबा टुकड़ा है जिसे मैं .Fortran()
का उपयोग करके आर से कॉल करता हूं। फोरट्रान कोड में subroutines का एक सेट होता है, और फ़ोरट्रान प्रोग्राम में एम्बेड किए जाने पर काम करता है और बाद में संकलित और कमांड लाइन से चलाया जाता है। हालांकि, जब मैं इसे आर से बुलाता हूं, तो दूसरी बार जब मैं फ़ंक्शन को कॉल करता हूं तो यह क्रैश हो जाता है।आर
चूंकि फोरट्रान कोड एक चर के रूप में संग्रहीत कई सूचकांक और सरणी आयामों का उपयोग करता है, मुझे लगता है कि कुछ गलत हो गया है। कुछ बिंदु पर, फोरट्रान कोड स्मृति में कहीं कहीं देख रहा है जहां यह नहीं होना चाहिए। तो मुझे फोरट्रान कोड से कदम उठाने की ज़रूरत है और जांच करें कि आर से जो कुछ आया वह मुझे लगता है कि यह है, और कोड जो मुझे लगता है वह करता है।
यदि यह एक आर समारोह होगा, तो मेरे पास debug()
का उपयोग करने का विकल्प होगा, browser()
कथन जोड़कर और कोड में एक बिंदु पर मुझे जो भी वैल्यू देखना है, उसे प्रिंट करना होगा। लेकिन फोरट्रान कोड मुझे इन चीजों में से किसी भी चीज की अनुमति नहीं देता है। अगर मैं इसे सही समझ गया, तो फोरट्रान का स्क्रीन आउटपुट आर
पर कब्जा नहीं किया गया है, तो क्या किसी को यह पता है कि मैं फोरट्रान कोड में आर के तर्कों के प्रकार और मूल्य की जांच कैसे कर सकता हूं। यदि आप आर से कॉल करते समय उस कोड को बाद में डीबग कर सकते हैं, तो यह स्पष्ट हो सकता है कि यह शानदार होगा।
मेरे उदाहरण का वर्णन करने के लिए यहां एक उदाहरण दिया गया है।
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
मैं आर से सबरूटीन mysub कॉल करना चाहते हैं कहो, और मुझे यकीन है कि मैं एक्स और एन सही ढंग से प्राप्त करना चाहते हैं। मैं निम्नलिखित समारोह का उपयोग करें:
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)
}
बहुत मामूली सवाल है, लेकिन आप स्क्रीन के बजाय फ़ोरट्रान सबराउटिन में प्रवेश करने वाली मात्रा क्यों नहीं लिखते हैं? इस तरह आप जांच सकते हैं कि कम से कम आर और फोरट्रान के बीच संचार सही तरीके से काम करता है या नहीं। –
@ बालिंटअरादी मैं अब बेवकूफ महसूस करता हूं ... ;-) थक्स। –
अरे, सबसे अच्छे प्रश्नों में सरल दिखने वाले उत्तर हैं :-) –