我在循环中使用提取函数。见下文。
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输出,但是一旦完成循环,我只得到一个输出。有人知道我做错了什么。感谢。
答案 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))