gpt4 book ai didi

r - 为什么 rasterToPoints 在第一次调用而不是第二次调用时生成错误?

转载 作者:行者123 更新时间:2023-12-04 10:05:49 25 4
gpt4 key购买 nike

我有一些代码可以遍历研究 ID (ids) 列表并将它们转换为单独的多边形/空间点。在第一次执行循环时会产生以下错误:

(函数(x)中的错误:尝试应用非函数

这是来自 raster::rasterToPoints 函数。我查看了此函数的帮助部分中的示例,传递 fun=NULL 似乎是一种可接受的方法(过滤掉所有 NA 值)。反正所有的值都等于 1,所以我尝试传递一个简单的函数,就像它建议的那样,例如 function(x){x==1}。当这不起作用时,我也尝试只抑制错误消息,但没有任何运气使用 try() 或 tryCatch()。

主要问题:
<强>1。为什么这会产生错误?
<强>2。为什么它只在第一次运行循环时显示错误?

可重现的例子:

library(ggplot2)
library(raster)
library(sf)
library(dplyr)

pacific <- map_data("world2")
pac_mod <- pacific
coordinates(pac_mod) <- ~long+lat
proj4string(pac_mod) <- CRS("+init=epsg:4326")
pac_mod2 <- spTransform(pac_mod, CRS("+init=epsg:4326"))
pac_rast <- raster(pac_mod2, resolution=0.5)
values(pac_rast) <- 1

all_diet_density_samples <- data.frame(
lat_min = c(35, 35),
lat_max = c(65, 65),
lon_min = c(140, 180),
lon_max = c(180, 235),
sample_replicates = c(38, 278),
id= c(1,2)
)
ids <- all_diet_density_samples$id
for (idnum in ids){
poly1 = all_diet_density_samples[idnum,]
pol = st_sfc(st_polygon(list(cbind(c(poly1$lon_min, poly1$lon_min, poly1$lon_max, poly1$lon_max, poly1$lon_min), c(poly1$lat_min, poly1$lat_max, poly1$lat_max, poly1$lat_min, poly1$lat_min)))))
pol_sf = st_as_sf(pol)
x <- rasterize(pol_sf, pac_rast)
df1 <- raster::rasterToPoints(x, fun=NULL, spatial=FALSE) #ERROR HERE
df2 <- as.data.frame(df1)
density_poly <- all_diet_density_samples %>% filter(id == idnum) %>% pull(sample_replicates)
df2$density <- density_poly
write.csv(df2, paste0("pol_", idnum, ".csv"))
}

任何帮助将不胜感激!

最佳答案

这些是错误消息,但不是严格意义上的错误,因为脚本会继续运行,结果不会受到影响。它们与垃圾收集有关(从内存中删除不再使用的对象),这使得查明导致它的原因变得棘手(下面你可以看到一个稍微修改过的例子,暗示另一个罪魁祸首),以及为什么它并不总是发生在同一地点。


编辑(2022 年 10 月)

这些烦人的消息

Error in x$.self$finalize() : attempt to apply non-function
Error in (function (x) : attempt to apply non-function

将在计划于 2023 年 1 月发布的下一个 Rcpp 版本中消失。您也可以像这样安装 Rcpp 的开发版本:

install.packages("Rcpp", repos="https://rcppcore.github.io/drat")

关于r - 为什么 rasterToPoints 在第一次调用而不是第二次调用时生成错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61598340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com