2016-08-04 52 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。