में न्यूमेरिकमैट्रिक्स मैनिपुलेटिंग मैं आरसीपीपी के साथ नया हूं। मैंने Advanced R by Hadley Wickham और सभी आरसीपीपी विगेट्स पढ़े हैं, लेकिन मुझे यह नहीं पता कि NumericMatrix
ऑब्जेक्ट्स को कैसे प्रबंधित किया जाए।आरसीपीपी
वहाँ इस R
कोड
mat <- matrix(1:9,3,3)
v <- matrix(2,2,2)
mat[1,] <- NA
mat[,3] <- 0.5
mat[2:3,2:3] <- v
पंक्तियों और स्तंभों पर पाशन और प्रत्येक mat[i,j]
का मान सेट के अलावा अन्य तरह बातें करने के लिए कोई आसान तरीका है?
संपादित 3: ठीक है दोबारा प्रयास करें।
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericMatrix lissage_incapC(NumericMatrix mat) {
// INIT
NumericMatrix x(mat.nrow()+1,mat.ncol()+1);
NumericMatrix out(mat.nrow(),mat.ncol());
// Here i want to set x first row and first column to NA_REAL //**1
for(int i=0; i<x.nrow(); i++){
for(int j=0; j<x.ncol(); j++){
if(i==0 || j==0)
x(i,j) = NA_REAL;
x(i,j) = mat(i-1,j-1);
}
}
for(int i=8; i<x.nrow()-1; i++){
for(int j=1; j<x.ncol()-1; j++){
NumericMatrix y = x(Range(i-1,i+1),Range(j-1,j+1));
y(1,1) = NA_REAL;
if((i == 8) & (j>1))
y.row(0) = NumericVector::get_na(); //problem here
out(i,j-1) = 1/2*x(i,j) + 1/2 * mean(na_omit(y));
}
}
out(_,out.ncol()) = 0.5; // Problem here
out(Range(0,7),_) = out(8,_); // Problem here
return out;
}
मैं टिप्पणी में मेरी समस्या बताया गया है:
यहाँ मेरी cpp फ़ाइल है। पहले में (// ** 1) मुझे पहली पंक्ति और पहला कॉलम सेट करने के लिए दो लूप लिखना होगा। मैं जो पूछ रहा हूं वह है: क्या ऐसा करने का कोई आसान तरीका है, जैसे हम आर में कर सकते हैं?
यह वही समस्या है जो मैंने अपने कोड की टिप्पणियों में इंगित की है।
तुम सच में पढ़ी * सभी Rcpp विगनेट्स की *: यहाँ एक छोटा डेमो है? क्योंकि मुझे पूरा यकीन है कि [त्वरित संदर्भ मार्गदर्शिका] (http://dirk.eddelbuettel.com/code/rcpp/Rcpp-quickref.pdf) आपके प्रश्न में उल्लिखित सब कुछ के बारे में बताता है। – nrussell
हां, मैंने 'mat (0, _) = NA_REAL; 'या' न्यूमेरिक वेक्टर :: get_na(); 'जैसी चीज़ों की कोशिश की। मैंने '= न्यूमेरिकमैट्रिक्स :: पंक्ति (mat.ncol(), NA_REAL) भी कोशिश की। मुझे हमेशा त्रुटियां मिलती हैं। यदि आप जानते हैं कि इसे कैसे करें, तो मुझे सीखने में खुशी होगी। मुझे यह सटीक होना चाहिए कि यह उस अंतर्निहित चरण में नहीं है जिसे मैं करना चाहता हूं, उसके बाद मेरे कोड में कुछ पंक्तियां हैं। – throwic
चूंकि आप आरसीपीपी का उपयोग कर रहे हैं क्योंकि पहले से ही लूपिंग आईएमओ अब खराब नहीं है और आपका मुख्य लाभ कोड स्पष्टता के मामले में होगा। – mts