这确实是我无法解释的奇怪行为。
library(terra)
r1 = rast(nrow = 2, ncol = 2)
values(r1) = c(0, 1, 2, 3)
r2 = r1
ext(r2) = ext(r2)/2
ext(r2)
ext(r1)
您会看到“r1”的范围也减少了一半。为什么?顺便说一句,您可以更改“r2”的值而不影响“r1”的值。据我所知,它仅适用于范围。
使用“栅格”包执行相同过程时也不会发生这种情况。
library(raster)
r1 = raster(nrow = 2, ncol = 2)
values(r1) = c(0, 1, 2, 3)
r2 = r1
extent(r2) = extent(r2)/2
extent(r2)
extent(r1)
中的简单赋值
terra
会创建浅表副本,这意味着如果编辑了派生对象,则可以更改原始对象。如果您想避免这种行为,解决方案是使用deepcopy
。的文档显示了与您发现的deepcopy
类似的行为:https://rspatial.github.io/terra/reference/deepcopy.htmltime
extent
这是一个错误,现已在开发版本中修复。
这是一个解决方法
as.vector()
:开发版本运行正常
你可以使用以下方式安装开发版本