在R中遍历几个SPDF的属性表

Iterate through the attribute tables of several SPDFs in R

总之我想知道:
遍历多个 SPDF 并对其属性表中的每一行进行计算的合适方法是什么?

一些更多的细节:我有一些 SPDF,我可以使用类似的东西遍历每个 SPDF 的多边形:

x = readOGR(...)
for (i in 1:length(x)){
    x$Volume_Norm[i] <- x$Volume[i]/max(pre_max)
    x$Volume_Sqrt[i] <- sqrt(x$Volume_Norm[i])
    x$Volume_Thrd[i] <- nthroot(x$Volume_Norm[i], 3)
    x$HAZARD_1[i] <- x$Volume_Thrd[i] * x$HAZARD_NEW[i]
  }

但我不知道如何将它应用到应用函数或类似的东西中,以便它适用于我所有的 SPDF,而且我不必单独更改 for 循环中的名称。
如果我尝试:

list <- list(x, y, z) # these are my SPDFs
fun <- function(x){
  for (i in 1:length(x)){
    x$Volume_Norm[i] <- x$Volume[i]/max(pre_max)
    x$Volume_Sqrt[i] <- sqrt(x$Volume_Norm[i])
    x$Volume_Thrd[i] <- nthroot(x$Volume_Norm[i], 3)
    x$HAZARD_1[i] <- x$Volume_Thrd[i] * x$HAZARD_NEW[i]
  }
}

lapply(list, fun)

没有任何变化,我得到:

> lapply(list, fun)
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

我已经在 https://gis.stackexchange.com/q/360449/145570 上问过这个问题并且在那里得到了回答(完全归功于@Spacedman!):

您的函数没有 return 修改后的对象。添加return(x),你会得到修改后的对象,然后lapply(list,fun)会return一个修改对象的列表。

fun <- function(x){
  for (i in 1:length(x)){
    x$Volume_Norm[i] <- x$Volume[i]/max(pre_max)
    x$Volume_Sqrt[i] <- sqrt(x$Volume_Norm[i])
    x$Volume_Thrd[i] <- nthroot(x$Volume_Norm[i], 3)
    x$HAZARD_1[i] <- x$Volume_Thrd[i] * x$HAZARD_NEW[i]
  }
return(x)  # <---this
}

然后你做:

list = lapply(list, fun)