2014-10-07 16 views
10

मैं आर आधारित कोड को आरसीपीपी आधारित कोड में परिवर्तित कर रहा हूं। मेरी समारोह का प्रमुख होता है:आरसीपीपी फ़ंक्शन चेक करें यदि अनुपलब्ध मान

NumericMatrix createMatrixOfLinkRatiosC(NumericMatrix matr, double threshold4Clean) { 
int i,j; 
NumericMatrix myMatr(matr.nrow(),matr.ncol()); 
myMatr=matr; 
....; 

} 

मैं समारोह जहां threshold4Clean याद आ रही है करने के लिए कॉल हैंडल करना चाहते हैं, लेकिन मैं नहीं मिल रहा हूँ कैसे करना है ... किसी भी मदद की बहुत सराहना की जाएगी।

+2

जब आप गायब कहते हैं, तो क्या आपका मतलब "एनए" है या क्या आपका मतलब है कि आप इसके लिए कोई मूल्य नहीं दे रहे हैं? – stanekam

उत्तर

7

आरसीपीपी और आरपीपीएआरडमिलिलो दोनों NA, NaN (एक आर एक्सटेंशन) और Inf के लिए परीक्षण करने की भविष्यवाणी करते हैं।

#include <RcppArmadillo.h> 

// [[Rcpp::depends(RcppArmadillo)]] 

// [[Rcpp::export]] 
arma::mat foo(int n, double threshold=NA_REAL) { 
    arma::mat M = arma::zeros<arma::mat>(n,n); 
    if (arma::is_finite(threshold)) M = M + threshold; 
    return M; 
} 

/*** R 
foo(2) 
foo(2, 3.1415) 
***/ 

हम तर्क के लिए शून्य के एक मैट्रिक्स, और परीक्षण प्रारंभ:

यहाँ एक छोटी RcppArmadillo उदाहरण है। यदि यह सीमित है (यानी NA या Inf या NaN), तो हम उस मान को जोड़ते हैं। यदि आप चाहते थे, तो आप अलग-अलग संभावनाओं के लिए भी परीक्षण कर सकते हैं।

यह वांछित परिणाम उत्पन्न करता है: बिना किसी दूसरे तर्क के NA का डिफ़ॉल्ट मान लागू होता है, और हमें शून्य का मैट्रिक्स मिलता है।

R> Rcpp::sourceCpp("/tmp/giorgio.cpp") 

R> foo(2) 
    [,1] [,2] 
[1,] 0 0 
[2,] 0 0 

R> foo(2, 3.1415) 
     [,1] [,2] 
[1,] 3.1415 3.1415 
[2,] 3.1415 3.1415 
R> 
+1

धन्यवाद Dirk, क्या आपके पास एक शुद्ध आरसीपीपी उदाहरण भी है? –

20

आर लापता मूल्यों का प्रतिनिधित्व करने के लिए (जो वास्तव में NaN एक विशेष प्रकार का है) NaN और NA दोनों है।

आर/सी एपीआई से कार्यों के लिए कुछ सच तालिकाओं (निरंतरता के निराशा होती कमी पर ध्यान दें)

: यह पता करने के लिए, क्योंकि वहाँ कई कार्यों कि जाँच करता है, तो एक मूल्य NaN -y ( NA या NaN) है महत्वपूर्ण है
+---------------------+ 
| Function | NaN | NA | 
+---------------------+ 
| ISNAN | t | t | 
| R_IsNaN | t | f | 
| ISNA  | f | t | 
| R_IsNA | f | t | 
+---------------------+ 

और Rcpp:

+-------------------------+ 
| Function  | NaN | NA | 
+-------------------------+ 
| Rcpp::is_na | t | t | 
| Rcpp::is_nan | t | f | 
+-------------------------+ 

और आर दुभाषिया से (ध्यान दें: Rcpp बल्कि आर/सी एपीआई की तुलना में इस मैच के लिए, कोशिश करता है):

+---------------------+ 
| Function | NaN | NA | 
+---------------------+ 
| is.na | t | t | 
| is.nan | t | f | 
+---------------------+ 

दुर्भाग्य से यह एक भ्रमित परिदृश्य है, लेकिन इससे आपको थोड़ा सा सशक्त होना चाहिए।

+1

अच्छी तरह से किया गया। शायद हमें इसे आरसीपीपी एफएक्यू में भी खींचना चाहिए? –

संबंधित मुद्दे