【问题标题】:How to remove "X" in front of raster brick Names如何删除光栅砖名称前的“X”
【发布时间】:2021-12-20 09:36:18
【问题描述】:

我需要一些关于我的光栅砖名称格式的帮助。我有一块 16 层波高的砖,每层都有一个自 1970 年以来的秒时间戳。我可以提取名称并转换为标准日期格式。但是,当我尝试将名称重新插入光栅砖时,每个日期戳前面都会出现一个“X”。这使我无法在闪亮的应用程序中创建日期滑块输入,因为最大值、最小值和值参数必须是数字。

我发现一个旧帖子说这是不可能的。 (Why does R add an "x" when renaming raster stack layers)

我很好奇是否有人知道解决方法?

这是我下载和清理光栅的代码。

library(terra)
url <- "http://thredds.cdip.ucsd.edu//thredds/fileServer/cdip/model/MOP_grids/CA_0.01_forecast.nc"

options(timeout = 10000)
data_set <- "wave_data.nc"
if (!file.exists(data_set)) {
  download.file(url, data_set, mode="wb")
}
waves <- rast(data_set, sub = "waveHs")
ROU <- ext(-121.0062, -118.7438, 33.10625, 34.90625)
wave_crop <- crop(waves, ROU)

remove_txt <- gsub("waveHs_waveTime.", "", names(waves)) |> 
  as.numeric() |> 
  lubridate::as_datetime()

library(raster)
wave <- brick(wave_crop)
names(wave) <- remove_txt

wave
#class      : RasterBrick 
#dimensions : 180, 226, 40680, 16  (nrow, ncol, ncell, nlayers)
#resolution : 0.009999997, 0.009999998  (x, y)
#extent     : -121.005, -118.745, 33.105, 34.905  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +ellps=WGS84 +no_defs 
#source     : memory
#names      : X2021.11.07.19.00.00, X2021.11.08.01.00.00, X2021.11.08.07.00.00, X2021.11.08.13.00.00, X2021.11.08.19.00.00, X2021.11.09.01.00.00, X2021.11.09.07.00.00, X2021.11.09.13.00.00, X2021.11.09.19.00.00, X2021.11.10.01.00.00, X2021.11.10.07.00.00, X2021.11.10.13.00.00, X2021.11.10.19.00.00, X2021.11.11.01.00.00, X2021.11.11.07.00.00, ... 
#min values :           0.08262682,           0.08607960,           0.08421428,           0.07400891,           0.06429628,           0.05832646,           0.05505765,           0.04826499,           0.03828974,           0.03100377,           0.02817857,           0.03242879,           0.03779505,           0.03922490,           0.05875918, ... 
#max values :             2.788141,             3.086087,             3.117096,             3.096558,             2.907296,             2.608371,             2.439595,             2.297133,             2.184082,             2.494745,             2.174670,             2.003929,             2.195310,             2.608896,             2.702595, ... 

【问题讨论】:

  • R 中的名称不能以 _ 或数字开头。
  • 名称不能以数字开头是不太正确的,但是这样的对象名称必须反引号才能从符号表中正确访问。我怀疑向您展示如何做到这一点将解决您的闪亮问题,因为这些名称并不是真正的数字类,并且调度系统不会将其识别为可以由期望的函数或运算符处理的东西数值。当您需要为滑块函数创建日期分类输入时,我认为您应该使用sub 删除as.numeric 之前的前导“X”。

标签: r raster names


【解决方案1】:

最简单的方法是将名称设置为 SpatRaster waves,因为 terra 不强制 R 名称有效性。

names(waves) <- remove_txt
waves
#class       : SpatRaster 
#dimensions  : 1000, 800, 16  (nrow, ncol, nlyr)
#resolution  : 0.009999997, 0.009999998  (x, y)
#extent      : -124.995, -116.995, 31.995, 41.995  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +ellps=WGS84 +no_defs 
#source      : wave_data.nc:waveHs 
#varname     : waveHs (significant wave height) 
#names       : 2021-~00:00, 2021-~00:00, 2021-~00:00, 2021-~00:00, 2021-~00:00, 2021-~00:00, ... 
#unit        :       meter,       meter,       meter,       meter,       meter,       meter, ... 

names(waves)
# [1] "2021-11-07 19:00:00" "2021-11-08 01:00:00" "2021-11-08 07:00:00"
# [4] "2021-11-08 13:00:00" "2021-11-08 19:00:00" "2021-11-09 01:00:00"
# [7] "2021-11-09 07:00:00" "2021-11-09 13:00:00" "2021-11-09 19:00:00"
#[10] "2021-11-10 01:00:00" "2021-11-10 07:00:00" "2021-11-10 13:00:00"
#[13] "2021-11-10 19:00:00" "2021-11-11 01:00:00" "2021-11-11 07:00:00"
#[16] "2021-11-11 13:00:00"

或者,您不能使用remove_txt 作为sliderInput 中的标签吗?

【讨论】:

  • 是的,我可以使用它,但是滑块和地图不会同步,因为名称值不同。滑块将具有适当的日期,但不会更改地图图层。我会尝试使用 terra,但我想我遇到了传单不允许喷溅栅格的问题。
  • 你是对的,传单还不支持 SpatRasters,我可能认为你可以用滑块做什么是错误的
  • 是的,您的设置使滑块工作并具有正确的日期
猜你喜欢
  • 2016-12-25
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2017-07-20
  • 2017-02-06
  • 1970-01-01
相关资源
最近更新 更多