在 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)
}
我不知道这个问题的标题是否足够,但问题如下。我最近一直在尝试 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)
}