[英]Is there an R function similar to approx() that works with rasters?
我有 >100k 单元格的 RasterLayer 对象,我试图根据具有 20 行的 a.csv 文件的两列(参见下面的示例数据)来插入值以创建新的栅格。 我使用 ggplot 从这 20 个数据点创建了一条响应曲线,并尝试根据该曲线中的 20 个线段创建一个新的栅格。 我的计划是使用 function 执行查找(类似于 ArcGIS 中的工具),并插入位于 csv 文件(将是大部分单元格)中的值之间的栅格对象中的值。 我正在尝试使用 raster::calc() 来完成此操作,使用 approx() 如本文所述。
我一直在尝试计算一个方程来近似 ggplot 曲线,但这相当复杂,并且在最终栅格中引入了比可接受的更多错误。
这是两列:“focal_var”对应于输入栅格中的潜在值范围,“pointp”列对应于要分配给 output 栅格的值范围。
焦点变量 | 点p |
---|---|
0.8052998 | 0.098823205 |
1.834359811 | 0.110267362 |
2.863419821 | 0.122470704 |
3.892479832 | 0.135436234 |
4.921539842 | 0.149168837 |
5.950599853 | 0.163676304 |
6.979659863 | 0.178970181 |
8.008719874 | 0.195066436 |
9.037779884 | 0.211985998 |
10.06683989 | 0.229755227 |
11.09589991 | 0.248406296 |
12.12495992 | 0.267977361 |
13.15401993 | 0.288512216 |
14.18307994 | 0.310058975 |
15.21213995 | 0.332667215 |
16.24119996 | 0.3563831 |
17.27025997 | 0.381242275 |
18.29931998 | 0.40726082 |
19.32837999 | 0.434425128 |
20.35744 | 0.462682111 |
作为一个可管理的可重现示例:
library(raster)
r <- raster(ncol=10, nrow=10) #input raster
values(r) <- runif(ncell(r)) * 21
csv <- read.csv("csv_example.csv", header = TRUE) #lookup/interpolation table above
output_raster <-
calc(x = r,
fun = (with(csv_example,
approx(
x = focal_var,
y = pointp,
xout = r,
method = "linear",
rule = 2,
na.rm = TRUE
)))
返回此错误:
h(simpleError(msg, call)) 中的错误:在为 function 'calc' 选择方法时评估参数'fun'时出错:没有将此 S4 class 强制转换为向量的方法
我想知道是否有 function 比 calc() 与栅格结合使用 approx(),因为 object 类型似乎存在问题,或者可能是用于在其中插值栅格的完全不同的组合/策略R?
我对编码还是很陌生(这是我的第一个堆栈溢出问题),所以我很感激任何建议! 谢谢!
那是因为您的 function 返回 data.table,然后您尝试将其应用于一维数据。 在这种情况下,您可以先定义您的 function,将其保存到 session,然后在计算中应用 function。
Lines <- "focal_var pointp
0.8052998 0.098823205
1.834359811 0.110267362
2.863419821 0.122470704
3.892479832 0.135436234
4.921539842 0.149168837
5.950599853 0.163676304
6.979659863 0.178970181
8.008719874 0.195066436
9.037779884 0.211985998
10.06683989 0.229755227
11.09589991 0.248406296
12.12495992 0.267977361
13.15401993 0.288512216
14.18307994 0.310058975
15.21213995 0.332667215
16.24119996 0.3563831
17.27025997 0.381242275
18.29931998 0.40726082
19.32837999 0.434425128
20.35744 0.462682111"
csv <- read.csv(textConnection(Lines), header = TRUE, as.is = TRUE, sep = " ")
library(raster)
#> Loading required package: sp
#> Warning: multiple methods tables found for 'direction'
#> Warning: multiple methods tables found for 'gridDistance'
r <- raster(ncol=10, nrow=10) #input raster
values(r) <- runif(ncell(r)) * 21
c <- with(csv,
approxfun(
x = focal_var,
y = pointp,
method = "linear",
rule = 2,
na.rm = TRUE
))
output_raster <- calc(x = r, function(x){c(x)})
plot(r)
plot(output_raster)
由代表 package (v2.0.1) 于 2022 年 1 月 24 日创建
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.