2016-08-04 164 views
2

空對象,我想創建空的數值對象這樣創建R中

corr <- cor() 

在循環以後使用它。 但是,它不斷返回此錯誤 Error in is.data.frame(x) : argument "x" is missing, with no default

這裏是我完整的腳本:

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") 
} 

有什麼建議嗎?

+0

原則上,'cor()'是一個函數,而不是你需要初始化的數據結構。 – Deena

+1

'cor'被矢量化並接受矩陣輸入。閱讀文檔。你不需要一個循環。 – Roland

回答

2

我們可以創建空的對象與numeric(0)logical(0)character(0)

例如

num_vec <- numeric(0) 

創建一個空的數值向量可以在以後填補了:

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

可能'數字(長度= 0)'更清晰,因爲'numeric(0)'可能會與初學者「創建一個數值爲0的數字對象」混淆。 –

2

由於您需要諮詢:

您很可能不需要這樣做,因爲您可能可以使用(i)向量化函數或(ii)預先爲您分配返回對象的循環。如果您堅持使用for循環,請正確設置它。這意味着您應該預先分配您可以執行的操作,例如,通過使用corr <- numeric(n),其中n是迭代次數。追加到矢量是非常slooooooow。