- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行一个代码并在使用 ifelse
时发现了一个奇怪的行为overlay
中的函数在光栅包中。简而言之,如果每个栅格的前5个值是NA
,函数就会报错.
为什么会这样?
下面是一个简短的代码,它模拟了我在使用 R 3.2.3 和光栅版本 2.5-2 时发现的问题,以及我正在考虑使用的一些临时解决方案。
谢谢
卡洛斯·阿尔贝罗
library(raster)
cob1d <- raster(matrix(1,nr=6,nc=6))
cob1 <- cob1d; cob2 <- cob1d; cob3 <- cob1d
overlay(cob1, cob2, cob3, fun=function(x1, x2, x3) ifelse(x1 > 0, x1 + x2 + x3, x3))
# class : RasterLayer
# dimensions : 6, 6, 36 (nrow, ncol, ncell)
# resolution : 0.1666667, 0.1666667 (x, y)
# extent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax)
# coord. ref. : NA
# data source : in memory
# names : layer
# values : 3, 3 (min, max)
# Changing the first 5 values...
cob1[1:5] <- NA; cob2[1:5] <- NA; cob3[1:5] <- NA
overlay(cob1, cob2, cob3, fun=function(x1, x2, x3) (x1 + x2 + x3))
# but if I use `ifelse`, there is a problem:
overlay(cob1, cob2, cob3, fun=function(x1, x2, x3) ifelse(x1 > 0, x1 + x2 + x3, x3))
# Error in ifelse(x1, x1 + x2 + x3, x3) :
# argument "x2" is missing, with no default
# Another way to solve it is adding a useless extra variable without `NA`.
cob4 <- cob1d
overlay(cob1, cob2, cob3, cob4, fun=function(x1, x2, x3, x4) ifelse(x1 > 0, x1 + x2 + x3, x3))
# same result as before...
# class : RasterLayer
# dimensions : 6, 6, 36 (nrow, ncol, ncell)
# resolution : 0.1666667, 0.1666667 (x, y)
# extent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax)
# coord. ref. : NA
# data source : in memory
# names : layer
# values : 3, 3 (min, max)
# or just avoiding the use of the `ifelse` function...
overlay(cob1, cob2, cob3, cob4, fun=function(x1, x2, x3, x4) (x1 > 0) * (x1 + x2 + x3) + (x1 <= 0)*x3)
最佳答案
这是一个有趣的案例。 overlay
使用前 5 个单元格来确定如何处理数据(通过 apply
或通过 do.call
)。第一个测试是看是否apply
可以使用。使用的函数可以通过 apply
运行如果所有值都是 NA
f <- function(x1, x2, x3) ifelse(x1 > 0, x1 + x2 + x3, x3)
m <- matrix(NA, 5, 3)
apply(m, 1, f)
apply
用于所有单元格。然而,
apply
当并非所有值都是
NA
时,此函数失败:
m[1] <- 1
apply(m, 1, f)
x
(不是
f
要求的三个参数)。
NA
值时函数失败),这种情况很少见。
raster:::calc
有论据
forcefun
避免使用
apply
,但这在
overlay
中不可用.我已将其添加到
raster
的 future 版本中(版本 >= 2.5-4),这样你就可以:
f <- function(x1, x2, x3) ifelse(x1 > 0, x1 + x2 + x3, x3)
overlay(cob1, cob2, cob3, fun=f, forcefun=TRUE)
calc
作为解决方法:
s <- stack(cob1, cob2, cob3)
r <- calc(s, fun=function(x) ifelse(x[1] > 0, x[1] + x[2] + x[3], x[3]))
r <- (cob1 > 0) * (cob1 + cob2 + cob3) + (cob1 <= 0)*cob3
关于r - r-raster中overlay和ifelse函数之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096725/
我需要删除R包“ raster”中图形周围的框框,但无法弄清楚应该更改哪个参数。示例如下: library(raster) r <- raster(nrows=10, ncols=10) r <- s
我有一个来自 LiDAR las 文件的大点 shapefile(xyz,大约 65,000 个点),我正在尝试使用 gdal_grid 将其插值到网格上: gdal_grid -ot Float64
require(raster) ## Function to aggregate fun.patch = 0.9 * length(x)) { return(as.vector(which.m
require(raster) ## Function to aggregate fun.patch = 0.9 * length(x)) { return(as.vector(which.m
亲爱的人群 问题 我尝试使用软件包 nfc、pgirmess、SpatialPack 和 spdep 计算空间相关图。但是,我很难定义距离的起点和终点。我只对较小距离的空间自相关感兴趣,但对较小的 b
我一直在使用raster包中的extract函数,使用shapefile定义的区域从光栅文件中提取数据。但是,我对该过程现在所需的内存量存在问题。我确实有大量 shapefile(~1000)。光栅文
这是完整的错误消息: C:\Project Files\Good\src\views\RasterView.as(26): col: 39 Error: Type was not found or w
使用 batik 1.7 版本的 batik-rasterizer.jar,我想知道如何正确调用 jar。 java -jar batik-rasterizer-1.7.jar -m image/pn
我正在使用 Paper.js 进行一些 Canvas 绘图。我正在尝试根据 Canvas 大小调整栅格的大小和位置,但我的代码无法正常工作。 var canvas = document.getElem
getPixels() 中返回的内容?我在文档中没有看到任何信息。颜色数据如何表示?它是如何布局的,按行还是按列? 最佳答案 数据表示:整红绿色蓝色整数阿尔法 关于java - Raster.getP
我正在尝试安装包“Raster”,但出现包“raster”的错误安装具有非零退出状态。 我在其他网站看过,没有成功提前谢谢你 我在下面详细说明过程和错误。 install.packages("rast
我编写了将像素数据复制到整数数组的图像处理代码,如下所示: void processImage(BufferedImage source) { WritableRaster raster =
基本上是标题。我知道您可以使用 rast() 读取栅格文件夹,但我只想堆叠两个单独读取的栅格。谢谢 最佳答案 请注意,使用 raster::stack,您可以在多个参数 (stack(x1,x2,x3
正如问题所说,我正在尝试将多层 terra 栅格转换为 rasterStack 对象,以便我可以将其与另一个包(biomod2),仅接受较旧的栅格对象。 有没有有效的方法可以做到这一点?我唯一的其他选
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
这里我尝试用最快的方法将 3 个矩阵(R、G 和 B)保存到 BufferedImage 中。 我在 StackExchange 上找到了这个方法,但它对我不起作用,因为它以灰度颜色保存图像。 如果我
更新 向导先生的回答给出了像素完美的结果,但它仅适用于 Windows,并且会破坏剪贴板内容。我的答案应该适用于任何平台,但不太精确:例如它省略了输入/输出标签。它确实允许设置光栅化宽度。 这个问题是
我正在尝试通过将栅格应用于 CALayer 来执行快速而肮脏的“模糊”。 CA 文档说 shouldRasterize 是可动画的,但是我没有得到任何动画。代码如下: CABasicAnimatio
我如何打开 .png 和 .tab 格式的栅格文件(使用 MapInfo 制作)并在 QGIS 中保留地理引用格式。非常感谢 最佳答案 您可以使用Georeferencer 工具,但您必须先在插件中激
在土壤制图的框架中,我需要对不确定数量的栅格求和。我尝试使用 'raster' 包和 'do.call' 函数来做到这一点。但是,如果 'sum' 函数可以对许多栅格求和,则使用 do.call 执行
我是一名优秀的程序员,十分优秀!