使用箭头分配函数作为 R purrr map2
Use an arrow assignment function as R purrr map2
我有一个栅格列表:
filelist <- as.list(c("rasterA", "rasterB") # name them
rasterlist <- lapply(filelist, function(x) raster::raster(x)) # read them in
以及与这些栅格对应的 CRSes 列表:
crslist <- as.list(c("crsA.Rds", "crsB.Rds")) # name them
crslist %<>% lapply(function(x) readRDS(x)) # read them in
要在您使用的光栅中填充 @crs
插槽(例如):
raster::crs(rasterA) <- crsA
但我不知道如何在 purrr::map2
调用中使用此箭头赋值。 R 作弊 sheet 中的示例是 map2(x, y, sum)
,但求和适用于向量,是无方向的,并且在其括号内包含其所有项。
看了map2的帮助,试了一下公式格式:
purrr::map2(rasterlist, crslist, ~ raster::crs(.x) <- .y)
但没有骰子:
Error in as_mapper(.f, ...) : object '.y' not found
有人知道我该怎么做吗?目前我使用的是一个简单的循环,但我正在努力强迫自己学习映射并不断碰壁。
for (i in length(rasterlist)) {
crs(rasterlist[[i]]) <- crslist[[i]]
}
谢谢!
起始条件:
for 循环后:
在 raster_assigner 函数之后改为:
希望这是可以挽救的,因为我还有其他类似的用例。干杯!
我们可能需要
purrr::map2(rasterlist, crslist, ~ {crs(.x) <- .y;.x})
它与 raster
无关 - 因为下面的简单示例显示了相同的错误
> map2(list(1, 2, 3), list(3, 4, 5), ~ names(.x) <- .y)
Error in as_mapper(.f, ...) : object '.y' not found
> map2(list(1, 2, 3), list(3, 4, 5), ~ {names(.x) <- .y; .x})
[[1]]
3
1
[[2]]
4
2
[[3]]
5
3
然而,这不会 return Map
中的错误(但它是不正确的,因为输出 returned 没有名称,除非我们用 {}
和 return x
> Map(function(x, y) names(x) <- y, list(1, 2, 3), list(3, 4, 5))
[[1]]
[1] 3
[[2]]
[1] 4
[[3]]
[1] 5
可以做一个专门的功能:
raster_assigner <- function(raster, crs_input){
raster::crs(raster) <- crs_input
raster
}
purrr::map2(rasterlist, crslist, raster_assigner)
我有一个栅格列表:
filelist <- as.list(c("rasterA", "rasterB") # name them
rasterlist <- lapply(filelist, function(x) raster::raster(x)) # read them in
以及与这些栅格对应的 CRSes 列表:
crslist <- as.list(c("crsA.Rds", "crsB.Rds")) # name them
crslist %<>% lapply(function(x) readRDS(x)) # read them in
要在您使用的光栅中填充 @crs
插槽(例如):
raster::crs(rasterA) <- crsA
但我不知道如何在 purrr::map2
调用中使用此箭头赋值。 R 作弊 sheet 中的示例是 map2(x, y, sum)
,但求和适用于向量,是无方向的,并且在其括号内包含其所有项。
看了map2的帮助,试了一下公式格式:
purrr::map2(rasterlist, crslist, ~ raster::crs(.x) <- .y)
但没有骰子:
Error in as_mapper(.f, ...) : object '.y' not found
有人知道我该怎么做吗?目前我使用的是一个简单的循环,但我正在努力强迫自己学习映射并不断碰壁。
for (i in length(rasterlist)) {
crs(rasterlist[[i]]) <- crslist[[i]]
}
谢谢!
起始条件:
for 循环后:
在 raster_assigner 函数之后改为:
希望这是可以挽救的,因为我还有其他类似的用例。干杯!
我们可能需要
purrr::map2(rasterlist, crslist, ~ {crs(.x) <- .y;.x})
它与 raster
无关 - 因为下面的简单示例显示了相同的错误
> map2(list(1, 2, 3), list(3, 4, 5), ~ names(.x) <- .y)
Error in as_mapper(.f, ...) : object '.y' not found
> map2(list(1, 2, 3), list(3, 4, 5), ~ {names(.x) <- .y; .x})
[[1]]
3
1
[[2]]
4
2
[[3]]
5
3
然而,这不会 return Map
中的错误(但它是不正确的,因为输出 returned 没有名称,除非我们用 {}
和 return x
> Map(function(x, y) names(x) <- y, list(1, 2, 3), list(3, 4, 5))
[[1]]
[1] 3
[[2]]
[1] 4
[[3]]
[1] 5
可以做一个专门的功能:
raster_assigner <- function(raster, crs_input){
raster::crs(raster) <- crs_input
raster
}
purrr::map2(rasterlist, crslist, raster_assigner)