为啥我不能在 terra::rast 中添加日期作为标题?

Posted

技术标签:

【中文标题】为啥我不能在 terra::rast 中添加日期作为标题?【英文标题】:Why can I not add a date as a title in terra::rast?为什么我不能在 terra::rast 中添加日期作为标题? 【发布时间】:2022-01-17 20:42:57 【问题描述】:

我正在从raster 慢慢过渡到terra::rast,我注意到我无法在我的标题中添加日期。我想出了一个解决方法(重新分配给角色),但我想知道为什么当它在raster 中工作时这不起作用?错误消息信息量不大。

这是一个例子:

dates <- seq(as.Date("2015-06-24"), as.Date("2016-01-01"), by=1)
test <- terra::rast(nrows=100, ncols=100, xmin=0, xmax=100, ymin=0, ymax=100,
                      crs="+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs", 
                      resolution=10)
values(test) <- runif(10000)
plot(test, col=viridis::plasma(11), main=dates[4], breaks = c(seq(0, 1, by=0.1)))

Error in if (main != "")  : missing value where TRUE/FALSE needed

此代码在执行以下操作时有效:

plot(test, col=viridis::plasma(11), main=as.character(dates[4]), 
     breaks = c(seq(0, 1, by=0.1)))

想法?

【问题讨论】:

【参考方案1】:

错误正是问题所在。在代码中的某个时刻,main 参数被测试以查看它是否是带有行 if(main != "") 的空字符串 ""。但是将Date 类对象与空字符串进行比较会得到一个缺失值NA 结果:

Sys.Date() == ""
# [1] NA

如果你给它NAif() 语句会引发错误:

if(NA)
# Error in if (NA)  : missing value where TRUE/FALSE needed

所以代码假设maincharacter 类对象。这是记录在案的,main 参数的?terra::plot 描述是:

character。主要情节标题(每个要绘制的图层一个)

幸运的是(见 cmets),最近似乎添加了对日期的支持,所以你可以从 Github 安装新版本!

【讨论】:

该功能是 2 周前添加的。所以可以使用terra的开发版本:install.packages('terra', repos='https://rspatial.r-universe.dev'),或者使用当前版本,做plot(x, main=as.character(dates[4])) 太棒了,谢谢你们!

以上是关于为啥我不能在 terra::rast 中添加日期作为标题?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 EnumWindows 不能在服务中工作?

Kivy:为啥 ScrollView 不能在 GridLayout 中工作?

为啥 MPMoviePlayerController 能在模拟器中工作,而不能在设备中工作?

为啥 getResourceAsStream() 可以在 IDE 中工作,但不能在 JAR 中工作?

为啥 SwiftUI ObservedObject 不能在列表行中工作?

为啥 setState() 在我的情况下不能在 React 中工作?