Sono nuovo con Rcpp. Ho letto Advanced R by Hadley Wickham e tutte le vignette Rcpp ma non riesco a capire come manipolare gli oggetti NumericMatrix
.Manipolazione di NumericMatrix in Rcpp
Esiste un modo semplice per fare le cose come questo codice 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
diverso da loop su righe e colonne e l'impostazione del valore di ogni mat[i,j]
?
Edit3: Ok proviamo di nuovo.
Ecco il mio file cpp:
#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;
}
ho sottolineato il mio problema nei commenti. Nel primo (// ** 1) devo scrivere due loop per impostare la prima riga e la prima colonna. Quello che sto chiedendo è: c'è un modo più semplice per farlo, come possiamo fare in R?
Questo è lo stesso problema che ho indicato nei commenti del mio codice.
Hai letto veramente * tutto * delle vignette Rcpp? Perché sono abbastanza sicuro che la [Guida rapida di riferimento] (http://dirk.eddelbuettel.com/code/rcpp/Rcpp-quickref.pdf) copre quasi tutto ciò che è menzionato nella tua domanda. – nrussell
Sì, ho provato cose come 'mat (0, _) = NA_REAL;' o con 'NumericVector :: get_na();'. Ho anche provato '= NumericMatrix :: Row (mat.ncol(), NA_REAL)'. Ottengo sempre errori Se sai come farlo, sarei felice di imparare. Devo precisare che non è al passo init che voglio farlo, sono poche righe dopo di ciò nel mio codice. – throwic
Dato che stai usando Rcpp già in loop, imho non è più cattivo e il tuo guadagno principale sarebbe in termini di chiarezza del codice. – mts