कुछ दिनों पहले इंटरनेट पर इस तरह की खोज करने के बाद, मैं अभी भी इस समस्या का वर्णन करने में कुछ भी ढूंढ नहीं पाया। (अन्यथा काफी अनुशंसित) 'लेखन आर एक्सटेंशन' के माध्यम से पढ़ना एक समाधान भी प्रदान नहीं करता है। इस प्रकार, यहाँ मेरी सबसे जरूरी सवाल है:आर में फोरिंग फ़ंक्शन के रूप में। फोर्ट्रान तर्क
क्या यह संभव है कार्यों पारित करने के लिए - समारोह/सबरूटीन मापदंडों .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
और एक:
मैं आदेश में इस पहले एक फोरट्रान सबरूटीन (समारोह मैं मूल रूप से पारित करने का इरादा है, इस प्रकार इंटरफ़ेस में थोड़े अजीब आयामों का उपयोग के आधार पर) का परीक्षण करने, में दो साधारण कार्यों लिखा था सरल आर समारोह ऊपर कार्य करने के लिए पारित करने के लिए:
asdf <- function(a, s, d, f){x <- c(a, s, d, f)}
एक segfault में (एक स्ट्रिंग के रूप में) "asdf" गुजर परिणाम .Fortran("foo", asdf, vector(mode="numeric", length=22))
पैदावार Error: invalid mode (closure) to pass to Fortran (arg 1)
और कॉलिंग, के रूप में तर्क स्पष्ट रूप से फिट नहीं करता है अपेक्षित प्रकार (अर्थात्, एक समारोह)।
एफवाईआई, मुझे उम्मीद है कि कोड कुछ भी सार्थक नहीं करेगा (यह एक और कार्य का कार्य होगा), मैं मुख्य रूप से जानना चाहता हूं कि क्या आर से गुजरने वाले कार्यों (या फ़ंक्शन पॉइंटर्स) बिल्कुल संभव है या गीलेर मैं तुरंत इस दृष्टिकोण पर छोड़ देता हूं और कुछ ऐसा काम करता हूं जो काम कर सकता है।
अग्रिम धन्यवाद,
डीन
तो, एक समारोह आर में एक वस्तु के रूप में माना जाता है? – DStevens
हां, एक एसईएक्सपी ऑब्जेक्ट, और उदाहरण के लिए आरसीपीपी में हम इसे फ़ंक्शन को पास करने में बहुत आसान बनाते हैं। –
@DirkEddelbuettel: क्या आपके पास फोर्ट्रान को कॉल करने के लिए कोई फैंसी आरसीपीपी सामान है, या फोर्ट्रान आरसीपीपी भूमि में सी के रूप में verboten के रूप में है? ;-) –