如何在for循环中使用提取函数?

时间:2014-10-16 15:08:38

标签: r for-loop raster shapefile

我在循环中使用提取函数。见下文。

for (i in 1:length(list_shp_Tanzania)){
  LU_Mod2000<- extract(x=rc_Mod2000_LC, y=list_shp_Tanzania[[i]], fun=maj)
}

maj函数在哪里:

maj <- function(x){
  y <- as.numeric(names(which.max(table(x))))
  return(y)
}

我期待得到i输出,但是一旦完成循环,我只得到一个输出。有人知道我做错了什么。感谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,一种解决方案是创建一个列表,然后将每次迭代的结果分配给列表的相应元素:

LU_Mod2000 <- vector("list", length(list_shp_Tanzania))
for (i in 1:length(list_shp_Tanzania)){
    LU_Mod2000[[i]] <- extract(x=rc_Mod2000_LC, y=list_shp_Tanzania[[i]], fun=maj)    
}

不要做

LU_Mod2000 <- c(LU_Mod2000, extract(x=rc_Mod2000_LC, y=list_shp_Tanzania[[i]], fun=maj))

循环内部。这将创建不必要的副本,并且需要很长时间才能运行。使用list方法,在循环之后,将结果列表转换为所需的格式(通常使用do.call(LU_Mod2000, <some function>)

或者,你可以用lapply取代for循环,这是许多人似乎更喜欢的

LU_Mod2000 <- lapply(list_shp_Tanzania, function(z) extract(x=rc_Mod2000_LC, y=z, fun=maj))