में अन्य पैकेज से सी फ़ंक्शन का उपयोग करके मैं बहु-आयामी एकीकरण करने के लिए एक C++ फ़ंक्शन में क्यूबचर पैकेज से सी सी रूटीन कॉल करने का प्रयास कर रहा हूं।आरसीपी
बुनियादी अनुसंधान उदाहरण मैं पुन: पेश करने की कोशिश कर रहा हूँ
library(cubature)
integrand <- function(x) sin(x)
adaptIntegrate(integrand, 0, pi)
है मैं सिर्फ निम्नलिखित this recipe from the gallery Rcpp से आर समारोह कह सकते हैं, लेकिन आगे और पीछे से सी/सी स्विच करने में कुछ प्रदर्शन जुर्माना होगा ++ आर के लिए सी सी + से सीधे सी समारोह को कॉल करने के लिए यह अधिक समझदार लगता है।
सी दिनचर्या adapt_integrate
// R_RegisterCCallable("cubature", "adapt_integrate", (DL_FUNC) adapt_integrate);
साथ cubature
से निर्यात किया जाता है मुझे समझ नहीं आता कि यह कैसे सी ++ से कॉल करने के लिए हालांकि,। यहां मेरा लंगड़ा प्रयास है,
sourceCpp(code = '
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double integrand(double x){
return(sin(x));
}
// [[Rcpp::depends(cubature)]]
// [[Rcpp::export]]
Rcpp::List integratecpp(double llim, double ulim)
{
Rcpp::Function p_cubature = R_GetCCallable("cubature", "adapt_integrate");
Rcpp::List result = p_cubature(integrand, llim, ulim);
return(result);
}
'
)
integratecpp(0, pi)
यह संकलित करने में विफल रहता है; स्पष्ट रूप से मैं कुछ बहुत मूर्खतापूर्ण कर रहा हूं और R_GetCCallable
के आउटपुट को Rcpp::Function
में परिवर्तित करने के लिए कुछ महत्वपूर्ण कदम उठा रहा हूं (या इसे सीधे कॉल करें?)। मैंने फ़ंक्शन पॉइंटर्स से निपटने वाली कई संबंधित पोस्ट पढ़ी हैं, लेकिन बाहरी सी फ़ंक्शन का उपयोग करके कोई उदाहरण नहीं देखा है।
इन लापता टुकड़ों को इकट्ठा करने के लिए बहुत धन्यवाद। दुर्भाग्यवश, मुझे समस्या पर पुनर्विचार करना होगा, क्योंकि मैं जो देखता हूं उससे 'adapt_integrate' आसानी से एक एकीकृतता स्वीकार नहीं करेगा जिसे मैंने आर्मडिलो के डेटा संरचनाओं का उपयोग करके परिभाषित किया है। पूर्णता के लिए, क्या आप उपयोग का एक न्यूनतम उदाहरण जोड़ पाएंगे? – baptiste
यह आपको फ़ंक्शन पॉइंटर तक पहुंच प्रदान करता है जो 'क्यूबचर' पंजीकृत है। मुझे नहीं पता कि आपको सी फ़ंक्शन के साथ क्या करना है ... –
वास्तव में, [उपयोग के उदाहरण पर विचार करना] (http://ab-initio.mit.edu/wiki/index.php/Cubature# उदाहरण) मुझे आगे की परेशानी दिखाई देती है: 'adapt_integrate_v' पॉइंटर्स को '* fdata' जैसी ऑब्जेक्ट्स की अपेक्षा करता है, एकीकृत और' * fval' जैसे पॉइंटर्स की अपेक्षा करता है, जबकि तर्क जो मैं वास्तव में पास करना चाहता हूं, उदाहरण के लिए हैं 'arma :: colvec' वस्तुओं। मुझे नहीं लगता कि मैं दोनों के बीच एक पुल बनाने में सक्षम हो जाऊंगा। मुझे आर-स्तरीय इंटरफेस के साथ रहना पड़ सकता है, या सी ++ में अपना 2 डी क्वाड्रैचर लागू करना पड़ सकता है। – baptiste