2014-07-14 10 views
6

मेरे पास Rcpp फ़ंक्शन है जो न्यूमेरिकमैट्रिक्स स्वीकार करता है और एक न्यूमेरिक वेक्टर देता है। In Rcpp - how to return a vector with names कि NumericVector को NumericMatrix के स्तंभ नाम प्रदान करती है:आरसीपीपी - यह जांचने के लिए कि कोई विशेषता शून्य है

out.attr("names")=VECTOR_ELT(inp.attr("dimnames"),1)

इस कोड को अगर NumericMatrix स्तंभ नाम नहीं था एक त्रुटि देता है मेरी कोड में मैं केविन Ushey यहाँ से सिफारिशों के आधार पर एक रेखा है , i..e colnames(inp)=NULLNULL है, तो मैं Rcpp में कैसे देख सकता हूं?

उत्तर

10

आप Rf_isNull हैं:

SEXP dm = inp.attr("dimnames"); 
if (!Rf_isNull(dm) && Rf_length(dm) > 1) { 
    out.attr("names") = VECTOR_ELT(dm, 1); 
} 

Fwiw, क्योंकि इस awkwardness के हम संभावना rownames, colnames सुविधा तरीकों Rcpp को भविष्य में कभी जोड़ेंगे। /:

+0

कि [Rcpp] के विकास के संस्करण में अब काफी उपयोगी – uday

+0

होगा (https (लंबाई की जांच सिर्फ वास्तव में कुछ है कि वहाँ dimnames विशेषता के सूचकांक 1 पर लगाने के लिए यह सुनिश्चित करना है) /github.com/RcppCore/Rcpp): [प्रतिबद्ध] (https://github.com/RcppCore/Rcpp/commit/61829557cf935c3d512cc8a3d5c3e39ff815ab5c) –

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