2016-08-04 21 views
2

Ich versuche leer numerisches Objekt wie dieseserstellen leeres Objekt in R

corr <- cor() 

zu schaffen es in einer Schleife später zu verwenden. , aber, es immer wieder diesen Fehler Error in is.data.frame(x) : argument "x" is missing, with no default.

Hier ist meine vollständige Skript:

EVI <- "D:\\Modis_EVI\\Original\\EVI_Stack_single5000.tif" 
y.EVI <- brick(EVI) 
m.EVI.cropped <- as.matrix(y.EVI) 
time <- 1:nlayers(y.EVI) 
corr <- cor() 

inf2NA <- function(x) { x[is.infinite(x)] <- NA; x } 
for (i in 1:nrow(m.EVI.cropped)){ 
     EVI.m <- m.EVI.cropped[i,] 
     time <- 1:nlayers(y.EVI) 
     Corr[i] <- cor(EVI.m, time, method="pearson", use="pairwise.complete.obs") 
} 

Jede Beratung wenden Sie sich bitte?

+0

Im Prinzip ist 'cor()' eine Funktion und keine Datenstruktur, die Sie initialisieren müssen. – Deena

+1

'cor' ist vektorisiert und akzeptiert Matrixeingabe. Lesen Sie die Dokumentation. Sie brauchen keine Schleife. – Roland

Antwort

2

Wir können leere Objekte erstellen mit numeric(0), logical(0), character(0) usw.

Zum Beispiel

num_vec <- numeric(0) 

erstellt eine leere numerische Vektor, der später gefüllt werden kann auf:

num_vec[1] <- 2 
num_vec 
# [1] 2 
num_vec[2] <- 1 
num_vec 
# [1] 2 1 
+1

Wahrscheinlich ist 'numeric (length = 0)' klarer, da 'numeric (0) 'mit" create a numeric object mit dem Wert 0 "von Anfängern verwechselt werden könnte. –

2

Da Sie um Rat fragen:

Es ist sehr wahrscheinlich, dass Sie dies nicht tun müssen, da Sie wahrscheinlich (i) eine vektorisierte Funktion oder (ii) eine lapply-Schleife verwenden können, die das Rückgabeobjekt für Sie vorbelegt. Wenn Sie darauf bestehen, eine for-Schleife zu verwenden, richten Sie sie richtig ein. Dies bedeutet, dass Sie eine Vorbelegung vornehmen sollten, z. B. indem Sie corr <- numeric(n) verwenden, wobei n die Anzahl der Iterationen ist. Das Anfügen an einen Vektor ist extrem slooooooow.

Verwandte Themen