在 R 中的 for-loop 中改变变量指向的数据

Mutating the data a variable is pointing to in a for-loop in R

我不知道这个问题的标题是否足够,但问题如下。我最近一直在尝试 non-standard R 中的评估是如何工作的,但显然我不太了解...

这是一个包含“空间”数据的示例,但我想它也适用于更普遍的情况。 所以我将这个变量命名为 nc 并将其复制三次以获得空间数据集的向量。让我们假装它们是不同的数据集。

nc = st_read(system.file("shape/nc.shp", package="sf"))
ncs = c(nc,nc,nc)

然后我想对这个向量的每个元素执行操作(我想在这种情况下改变它的坐标参考系)并改变实际数据?!名字指向。 所以当我执行以下操作时,它不仅看起来完全是垃圾,而且也不起作用。

for (d in ncs) {
 d = st_transform(d, crs=4326) 
}

我没有对 ncs 中的每个 object 进行变异,而是创建了 一个 新的 object 称为 d,它实际上已被转换。

当然我可以手动完成 3 次:

ncs[[1]] = st_transform(ncs[[1]], crs=4326)
#...

但这不是重点。我如何在 for-loop 中解决这个问题?我想需要引用一些,取消引用...但不确定。

如果您将项目存储在列表中

library(sf)
nc = st_read(system.file("shape/nc.shp", package="sf"))
ncs = list(nc,nc,nc)

然后你可以使用lapply对列表中的每个项目应用一个函数

nsc <- lapply(ncs, st_transform, crs=4326)

在 R 中,使用手动编写 for 循环的应用函数或映射函数通常要容易得多。无需为此类任务进行元编程或引用。

如果您坚持使用循环,同样,您希望确保您的项目在列表中,并且在每次迭代中,您需要明确更新列表中的项目

for (i in seq_along(ncs)) {
  nc[[i]] <- st_transform(ncs[[i]], crs=4326)
}