使用其他栅格作为指标对栅格堆栈的每个网格单元求和的函数

2024-01-03

## input raster
s <- stack(list.files("~/dailyraster", full.names=TRUE)) # daily raster stack
r_start <- raster("~/stackSumSTART.asc") # this raster contain starting Julian day
r_end <- raster("~/stackSumEND.asc") # this raster contain ending Julian day
noNAcells <- which(!is.na(r[])) # cell numbers which contain values

## dummy raster
x <- r
x[] <- NA 

## loop
for (i in noNAcells) {      
  x[i] <- sum(s[[r_start[i]:r_end[i]]][i])
}

我想创建一个像这样的函数stackApply(),但我希望它能够在单元格的基础上工作。

上面是一个for()循环版本,效果很好,但需要太多时间。

关键是每个单元格的范围sum()从两个栅格层,r_start, r_end在上面的脚本中。

现在我正在努力使用以下代码来转换这段代码apply() family.

有没有可能提高速度for()环形?或者请给我一些编写此代码的提示apply()

任何评论都会对我有帮助,谢谢。


你的方法

x <- s$layer.1

system.time(
for (i in 1:ncell(x)) {
     x[i] <- sum(s[[r_start[i]:r_end[i]]][i], na.rm = T)
   }
)
   user  system elapsed 
  0.708   0.000   0.710

我的建议

您可以在堆栈末尾添加用作索引的栅格,然后使用calc高度加速该过程(~30-50x)。

s2 <- stack(s, r_start, r_end)
sum_time <- function(x) {sum(x[x[6]:x[7]], na.rm = T)}

system.time(
   output <- calc(s2, fun = sum_time)
)
   user  system elapsed 
  0.016   0.000   0.015
all.equal(x, output)
[1] TRUE

样本数据

library(raster)

# Generate rasters of random values
r1 <- r2 <- r3 <- r4 <- r5 <- r_start <- r_end <- raster(ncol=10, nrow=10)

r1[] <- rnorm(ncell(r1), 1, 0.2)
r2[] <- rnorm(ncell(r2), 1, 0.2)
r3[] <- rnorm(ncell(r3), 1, 0.2)
r4[] <- rnorm(ncell(r4), 1, 0.2)
r5[] <- rnorm(ncell(r5), 1, 0.2)
s <- stack(r1,r2,r3,r4,r5)

r_start[] <- sample(1:2, ncell(r_start),replace = T)
r_end[] <- sample(3:5, ncell(r_end),replace = T)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用其他栅格作为指标对栅格堆栈的每个网格单元求和的函数 的相关文章

  • 查找嵌套列表中元素的索引?

    我有一个类似的列表 mylist lt list a 1 b list A 1 B 2 c list C 1 D 3 是否有一种 无循环 方法来识别元素的位置 例如如果我想用 5 替换 C 的值 并且在哪里找到元素 C 并不重要 我可以这样
  • 在 Shiny 中设置一个绘图缩放以匹配另一个绘图缩放

    我正在尝试使用情节重排获取一个图的 x 轴缩放限制 并将它们应用到 Shiny 中的另一个图 到目前为止 我可以从 plot1 x轴限制 获取相关的plotly relayout数据 将其转换 从数字到日期 并在绘制 plot2 之前将其提
  • 如果“testthat”测试在“R”中失败,则打印自定义诊断信息

    I use a testthat单元测试来检查是否data frame函数返回的结果与我期望它返回的结果相同 如果测试失败 testthat打印一些诊断信息 例如 MyFunction df orig is not identical to
  • 如何使用 r 中的 caret 包在最佳调整超参数的 10 倍交叉验证中获得每次折叠的预测?

    我试图使用 R 中的插入符包使用 10 倍交叉验证和 3 次重复来运行 SVM 模型 我想使用最佳调整的超参数获得每次折叠的预测结果 我正在使用以下代码 Load packages library mlbench library caret
  • R从列表中提取数据框,列名中没有前缀

    我在列表中放置了一个数据框 然后 当尝试将其提取回来时 我得到了该数据帧的所有以列表键为前缀的列名称 有没有办法完全按照最初传递的方式提取数据帧 cols lt c column1 Column2 Column3 df1 lt data f
  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • 分离并重新附加“tools:rstudio”

    又名玩火 以下不起作用 rstd obj lt as environment tools rstudio detach tools rstudio attach rstd obj name tools rstudio 好吧 它似乎有效 但随
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • R.matlab/readMat:readTag(this) 中出错

    我正在尝试使用 R matlab 将 matlab 文件读入 R 但遇到此错误 require R matlab r lt readMat file mat verbose T Trying to read MAT v5 file stre
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 比较 R 中的两个字符向量

    我有两个 ID 字符向量 我想比较这两个字符向量 特别是我对以下数字感兴趣 A和B各有多少个ID 有多少个ID在A中但不在B中 有多少个ID在B但不在A 我还想画维恩图 以下是一些可以尝试的基础知识 gt A c Dog Cat Mouse
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • 使用outer代替expand.grid

    我正在寻找尽可能快的速度并留在基地做该做的事expand grid做 我用过outer为过去类似的目的创建一个向量 像这样的东西 v lt outer letters LETTERS paste0 unlist v lower tri v
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • ggplot散点图中的图例问题

    我想使用 ggplot 创建显示方法比较数据的散点图 绘图应包含原始数据 理想线和带误差的拟合线 图例应显示理想线和拟合线的线型 线宽 线颜色 我可以获得大部分我想要的东西 但是图例存在以下问题 图例显示每种线型有 2 条线 为什么 如何解
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • 具有 dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY

随机推荐

  • IE 中的事件处理

    我下面包含的代码允许我在用户第一次将鼠标悬停在元素上时执行某些操作 然后删除该事件 它在 W3C 事件模型浏览器中运行良好 但在 IE6 8 中不断抛出错误 我从另一个问题中得到了代码 并相信它可以处理 IE 有人看到我做错了什么吗
  • 如何使用 Tesseract OCR 从图像中读取表格数据?

    有谁知道如何从图像中读取和解析任何表格数据 我正在使用 asp net 应用程序 并且已使用 Tesseract OCR API 成功读取数据 但无法从图像读取表格 请用c 代码给出解决方案 None
  • 在 div 上使用 .FindControl() 失败

    我有一个 html div 元素 其中包含多个 div 其值我想放入数组服务器端 我的 html div 看起来像 div div class box 2 div div class box 1 div div class box 3 di
  • jQuery:如何找到第一个可见的输入/选择/文本区域(不包括按钮)?

    I tried input not input type button input type submit button visible first 但它没有找到任何东西 我的错误是什么 UPD 我在 document load 上执行此操
  • Python循环遍历Excel表格,放入一个df中

    我有一个 Excel 文件foo xlsx约40张sh1 sh2等 每张纸的格式为 area cnt name nparty1 name nparty2 blah 9 5 5 word 3 7 5 在每张表中 我想用以下格式重命名变量nam
  • 比特币地址生成出现Python错误

    我正在尝试用 python 来理解比特币 并尝试创建我自己的虚荣地址生成器 下面是 while 循环的片段 循环运行大约 10 次后 我不断收到错误消息 任何帮助将不胜感激 我搜索了论坛并找到了答案 但它们不起作用 IE 我改变了 inte
  • XP 和 Server 2003 上并发调用时 wmic 失败

    我在用wmic以获得时间 我已将其范围缩小到一 1 行 bat 文件 我从 stackoverflow 学到了有关管道 stdin 和 stdout 以避免挂起的知识 C gt type t bat TYPE NUL wmic os get
  • ASP.Net 3.5/4.0 代码隐藏还是代码文件?

    我读了之前的帖子 代码文件与代码隐藏 https stackoverflow com questions 73022 codefile vs codebehind 但我仍然很困惑应该使用哪个 听起来 CodeFile 是应该使用的较新选项
  • 创建一系列文本剪辑并使用 moviepy 将它们连接成视频

    在 MoviePy 中 有一个 API 可以从文本创建剪辑以及连接剪辑列表 我正在尝试在循环中创建剪辑列表 然后尝试将它们连接起来 问题是每次它都会创建一个 25 秒的视频文件 并且循环中仅包含最后一个文本 这是代码 for text in
  • 如何在没有原型的情况下找到C函数?

    公司政策规定 C 源代码中的每个函数都有一个原型 我继承了一个有自己的 make 系统的项目 所以我cannot在 gcc 或 Visual Studio 上测试它 发现其中一个文件有一些没有原型声明的静态函数 有没有办法 不一定使用编译器
  • 如何在Android上将GPS坐标保存在exif数据中?

    我正在将 GPS 坐标写入 JPEG 图像 并且坐标是正确的 如我的 logcat 输出所示 但它似乎以某种方式被损坏 读取 exif 数据会导致空值 或者对于我的 GPS 512 976698 degrees 512 976698 deg
  • 使用 VBA 从 Outlook 2010 保存 .XLSX 附件

    我们使用 Outlook 2010 并接收带有 Excel 附件的电子邮件 我们手动将附件保存在我们在网络驱动器上的分区文件夹中创建的子文件夹中 我很好奇的是是否有可能 使用代码检查传入的电子邮件以查看它们是否有附件 然后检查附件是否为 X
  • 内存间接寻址 movl - 汇编

    我试图了解内存间接寻址在具有 AT T 语法的汇编语言中到底是如何工作的 movl eax ebx movl eax ebx 这是一个类似的问题 解释了内存间接寻址 https stackoverflow com questions 161
  • 是否可以使 JavaFX 中的 ImageView 响应式?

    我和一些朋友正在进行一个项目 我们尝试用 JavaFX 编写游戏 我们有一个 GridPane 它与内部的 ImageView 一起生长以容纳地图和游戏角色等 游戏角色和敌人将有自己的图像视图 我们可以在网格窗格中移动 所以 我们现在的问题
  • 尝试禁用 JInternalFrame 的拖动

    我已经四处寻找了一段时间 但找不到禁用拖动 JIntenal Frame 的方法 任何帮助将不胜感激 TYIA 罗兰 请记住这是一个小程序 import java awt import java applet import java awt
  • 如何查询NHibernate的特定类型?

    我使用 Fluent NHibernate 和 DiscrimminateSubClassesOnColumn 来支持子类化 用于区分子类的列未映射到实体上的实际属性 如何创建仅返回给定类型实体的查询 这是我的尝试 其中 propertyN
  • ESP8266 在简单的 http 请求后崩溃

    我正在使用 NodeMCU V3 模块 每当我尝试向服务器发出 http 请求时 模块就会崩溃 这是代码 void setup WiFi begin wifi name wifi password while WiFi status WL
  • 无法从 ruby​​gems 下载数据

    我不知道尝试运行时这个错误意味着什么gem update system 9 29 2 2 3 gem update system ERROR While executing gem Gem RemoteFetcher FetchError
  • Scala中二叉树的尾递归最大深度方法

    我写了一个计算二叉树最大深度的方法 我想写一个尾递归方法 我想过使用列表 但没有找到解决方案 这是我的方法 不是尾递归的 def depth Int def iter f FormulaWff Int f match case Var gt
  • 使用其他栅格作为指标对栅格堆栈的每个网格单元求和的函数

    input raster s lt stack list files dailyraster full names TRUE daily raster stack r start lt raster stackSumSTART asc th