You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无自定义函数的R克里金插值脚本打包为R包方法咨询

脚本转R包完整操作步骤

1 前置准备

先安装R包开发必备工具:

install.packages(c("devtools", "usethis", "roxygen2"))

2 脚本封装为函数

你原来的脚本属于单次运行的线性代码,存在大量硬编码逻辑(比如固定工作目录、固定谷歌文件ID、固定输出路径等),且直接调用library()加载依赖,不符合R包规范,需要先封装为参数化的可复用函数:

  • 移除所有setwd()操作,R包不允许修改用户的工作目录
  • 所有硬编码的配置(文件路径、坐标系、分辨率、输出路径等)改为函数参数
  • 所有第三方包的函数调用前加包名::前缀,不允许在包代码中使用library()或require()加载依赖
  • 可增加参数控制是否输出可视化结果,避免用户不需要的时候强制弹出绘图

封装后的函数示例:

#' 克里金插值生成银品位栅格
#' @param csv_id 输入csv对应的谷歌文件ID,或本地csv文件路径
#' @param crs_code 空间坐标系EPSG编码,默认值为9155(SIRGAS-Chile 2016 / UTM zone 19S)
#' @param grid_res 插值网格分辨率,默认值为c(100,100)
#' @param output_path 输出tif栅格文件的保存路径,默认值为"output.tif"
#' @param show_plot 是否输出插值结果可视化图表,默认值为TRUE
#' @return 插值结果raster对象
#' @export
krige_silver <- function(csv_id = "1YOCFoHkKqkc69YfvdV-lrUThTP_32LHn",
                         crs_code = 9155,
                         grid_res = c(100,100),
                         output_path = "output.tif",
                         show_plot = TRUE){
  # 读取输入数据
  if(grepl("^[a-zA-Z0-9_-]{25,}$", csv_id)){
    silver_data = utils::read.csv(sprintf("https://docs.google.com/uc?id=%s&export=download", csv_id))
  } else {
    silver_data = utils::read.csv(csv_id)
  }
  # 转换为空间sf对象
  silver_2 <- sf::st_as_sf(silver_data, coords = c("Este", "Norte"))
  silver_2 <- sf::st_set_crs(silver_2, crs_code)
  # 计算变异函数
  varem <- gstat::variogram(silver ~ 1, silver_2, cutoff = 5000,width = 200)
  varex <- gstat::vgm(psill = 350, model = "Sph", range = 2000,nugget = 0)
  varaut <- gstat::fit.variogram(varem, varex)
  # 生成插值空网格
  emptyr <- raster::raster(as(silver_2, "Spatial"))
  raster::res(emptyr) <- grid_res
  Emptygrid <- raster::rasterToPoints(emptyr, spatial = TRUE)
  sp::gridded(Emptygrid) <- TRUE
  Emptygrid <- as(Emptygrid, "SpatialPixels")
  Emptygrid <- sf::st_as_sf(Emptygrid)
  # 执行克里金插值
  Inter <- gstat::krige(silver~1, locations=silver_2, newdata=Emptygrid, model=varaut)
  Inter_sp <- as(Inter, Class = "Spatial")
  # 输出栅格文件
  r <- raster::raster(Inter_sp)
  raster::res(r) <- grid_res
  img <- raster::rasterize (x = Inter_sp, y = r, field = Inter_sp$var1.pred )
  raster::writeRaster(img, output_path, overwrite = TRUE)
  # 输出可视化结果
  if(show_plot){
    print(sp::spplot(Inter_sp, "var1.pred", asp=1, main="银品位预测结果, gr/Ton"))
    p <- tmap::tm_shape(img) + 
      tmap::tm_raster(n=10, palette="RdBu", auto.palette.mapping=FALSE,midpoint = NA, title="克里金预测\n银品位\n(gr/Ton)") + 
      tmap::tm_shape(silver_2) + 
      tmap::tm_dots(size=0.2) + 
      tmap::tm_legend(legend.outside=TRUE)
    print(p)
  }
  return(img)
}

3 创建R包基础结构

运行以下代码创建R包项目,替换krigingSilver为你自己的包名:

usethis::create_package("krigingSilver")

运行后会自动打开新的RStudio项目,生成R包必备的基础目录和文件。

4 保存函数到包目录

把第二步封装好的函数保存为.R文件,放到项目自动生成的R文件夹下,比如命名为krige_silver.R。

5 声明第三方依赖

你用到的所有第三方包都需要在包配置中声明,逐行运行以下代码添加依赖:

usethis::use_package("sf")
usethis::use_package("sp")
usethis::use_package("raster")
usethis::use_package("rgdal")
usethis::use_package("gstat")
usethis::use_package("tmap")

运行后会自动在DESCRIPTION文件的Imports字段添加对应的依赖声明。

6 生成函数文档

运行以下代码自动生成函数帮助文档:

devtools::document()

运行后会自动生成man文件夹,里面存放函数对应的.Rd帮助文件,用户安装包后可以用?krige_silver查看函数说明。

7 本地测试

运行以下代码加载本地开发的包,测试函数是否正常运行:

devtools::load_all()
# 测试调用函数
res <- krige_silver()

确认函数运行正常,输出结果符合预期。

8 检查与打包

先运行检查命令,解决所有报错和警告:

devtools::check()

检查通过后运行打包命令,生成可分发的R包安装文件:

devtools::build()

运行后会在项目同级目录生成.tar.gz格式的R包源码文件,其他人可以用install.packages("路径/krigingSilver_xxx.tar.gz", repos = NULL)安装使用。


内容的提问来源于stack exchange,提问作者Edmundo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 05:54:02