将两个函数转换为一个 R



好的,我想把我的函数kri3和Kmap变成一个函数。这两个功能都由他们自己工作。我遇到的问题是,当我组合两个 kri3 时,不会保存它在我的全局环境中创建的值并将它们传递给 Kmap。因此,除非我将函数一分为二,否则 Kmap 不会使用这些值。为什么我不能把它变成一个函数?我只想为所有这些提供一个函数,而不是两个。

我想做的函数是一个函数,它将采用变量,纬度,经度以及地图在x和y方向上的清晰度。然后,它将对给定的数据进行克里格运算,并将两个用于预测和方差的热图一次性输出到 ggmap 上。

kri3 <- function(var, lat, lon, defx, defy){
#making a data frame out of the given vectors
spdf <- data.frame(var,lat,lon)
#makeing spatial point data frame coords
sp::coordinates(spdf) <- ~ lon + lat
bbox <- sp::bbox(spdf)
#variogram stuff
lzn.vgm <- gstat::variogram(var ~ 1, spdf)
lzn.fit1 <- gstat::fit.variogram(lzn.vgm, model = gstat::vgm(1, "Sph", 900, 1))
lzn.fit = automap::autofitVariogram(var ~ 1,
spdf,
model = c("Sph"),
kappa = c(0.05, seq(0.2, 2, 0.1), 5, 10),
fix.values = c(NA, NA, NA),
start_vals = c(NA,NA,NA),
verbose = T)
#making our grid
cs <- c(defx, defy)
bb <- sp::bbox(spdf)
cc <- bb[,1] + (cs/2)
cd <- ceiling(diff(t(bb))/cs)
gold_grd <- sp::GridTopology(cellcentre.offset = cc, cellsize = cs, cells.dim = cd)
gold_grd
p4s <- sp::CRS(sp::proj4string(spdf))
gold_sg <- sp::SpatialGrid(gold_grd, proj4string = p4s)
summary(gold_sg)
#kringing and auto kriging
lzn.kriged <- as.data.frame(gstat::krige(var ~ 1, spdf, gold_sg , model=lzn.fit1))
lzn.Akriged <- automap::autoKrige(var ~ 1, spdf, gold_sg)
lzn.Akriged.pred <- lzn.Akriged$krige_output$var1.pred
lzn.Akriged.var <- lzn.Akriged$krige_output$var1.var
return(lzn.kriged)
return(lzn.Akriged.var)
return(lzn.Akriged.pred)
}
kriw <- kri3(new_river$E_coli, new_river$lat2, new_river$lon2, 0.005, 0.005)
Kmap <-  function(lat, lon, kriw){
#making a dataframe for ggplot
kriw <- as.data.frame(kriw)
#making a maps
bbox1 <- ggmap::make_bbox(lon, lat, f = 1.4)
map <- ggmap::get_map(bbox1)
#making a heat map
M1 <- ggmap::ggmap(map) + 
ggplot2::geom_tile(data = kriw, ggplot2::aes(x = lon,
y = lat, alpha = var1.pred), fill = "red")
M2 <- ggmap::ggmap(map) + 
ggplot2::geom_tile(data = kriw, ggplot2::aes(x = lon, 
y = lat, alpha = var1.var), fill = "red")
#Placing both heat maps together
heat <- gridExtra::grid.arrange(M1,M2, ncol=2)
return(heat)
}
Kmap(new_river$lat2, new_river$lon2, kriw)

r2evans是对的。

而不是使用 return 3 次,我需要使用它一次。

旧代码:

return(lzn.kriged)
return(lzn.Akriged.var)
return(lzn.Akriged.pred)

新代码:

kriw <- data.frame(lzn.kriged, lzn.Akriged.var, lzn.Akriged.pred)
return(kriw)

这可以轻松地让我移动变量并创建一个函数。

相关内容

  • 没有找到相关文章

最新更新