diğer paketinden C işlevini kullanarak çok boyutlu birleştirme gerçekleştirmek için C++ işlevinde bir C yordamı çağırmak çalışıyorum.Rcpp
ben yeniden oluşturmaya çalışıyorum temel Ar örneği sadece this recipe from the gallery aşağıdaki Rcpp bu R işlevi diyebiliriz ama ileri geri c/c geçiş bazı performans cezası olacağını
library(cubature)
integrand <- function(x) sin(x)
adaptIntegrate(integrand, 0, pi)
olduğunu ++ R'ye C++'dan direkt olarak C fonksiyonu çağırmak daha mantıklı görünüyor.
adapt_integrate
rutin C ı ancak, C++ onu aramak için anlamıyorum
// R_RegisterCCallable("cubature", "adapt_integrate", (DL_FUNC) adapt_integrate);
ile cubature
ihraç edilmektedir. İşte bu benim topal girişimi,
Bu, derlenemiyor; Açıkçası çok aptalca bir şey yapıyorum ve R_GetCCallable
çıktısını Rcpp::Function
'a dönüştürmek için bazı önemli adımları atıyorum (veya doğrudan arayın?). İşlev işaretçileriyle ilgili birçok ilgili yazı okudum, ancak harici bir C işlevi kullanarak bir örnek görmedim.
Bu eksik parçaları birleştirdiğiniz için çok teşekkürler. Problemi yeniden gözden geçirmem gerekecek, çünkü ne yazık ki, 'adap_integrate' göründüğümden armadillo'nun veri yapılarını kullanarak tanımladığım bir integrali kolayca kabul etmeyecek. Tamlık için, minimal bir kullanım örneği ekleyebilir misiniz? – baptiste
Size ne verir, "cubature" in kayıtlı olduğu işlev işaretçisine erişimdir. O zaman C fonksiyonunda ne yapman gerektiğini bilmiyorum ... –
, [kullanım örneği dikkate alındığında] (http://ab-initio.mit.edu/wiki/index.php/Cubature# Örnek) İleride bir sorun görüyorum: 'adap_integrate_v'' * fdata' gibi nesnelere imleçler bekler, integral '' fval' gibi imleçler bekler; arma :: colvec nesnesi. İkisi arasında köprü kurabileceğimi sanmıyorum. R-level arayüzüne bağlı kalmak ya da kendi 2D quadrature'ımı C++ 'da uygulamak zorunda kalabilirim. – baptiste