You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在rgee中替代GEE JavaScript的typeof实现对象类型判断?

如何在rgee中替代GEE JavaScript的typeof实现对象类型判断?

嗨,我完全懂你碰到的这个麻烦!在GEE JavaScript里用typeof判断对象类型很顺手,但到了rgee里直接照搬就行不通,用ee$Algorithms$ObjectType返回的结果看起来也不对,还不能随便用getInfo()(毕竟是客户端操作,不适合放在脚本里跑)。

问题出在这:ee$Algorithms$ObjectType(band)返回的是一个服务器端的ee.String对象,不是R本地的字符串。你直接用R的==去和'String'对比,其实是在客户端把这个ee对象转成了显示字符串(也就是你看到的EarthEngine Object: String),自然对比不对。

正确的做法是用GEE服务器端的字符串相等判断方法——equals(),这样就能在服务器端完成类型校验,不需要触发客户端的getInfo(),完全适配脚本运行需求。

具体实现示例

  1. 判断是否为字符串类型
# 服务器端判断:返回一个ee.Boolean对象
is_string <- ee$Algorithms$ObjectType(band)$equals('String')

# 如果需要在R客户端执行分支逻辑(谨慎使用getInfo,仅必要时用)
if (is_string$getInfo()) {
  # 这里写你针对字符串类型的处理逻辑
}
  1. 服务器端条件分支(推荐,全程在GEE服务器执行)
    如果你的逻辑是要在GEE服务器端完成的(比如构建影像、计算等),直接用ee$Conditional结合上面的判断,完全不需要客户端交互:
result <- ee$Conditional(
  ee$Algorithms$ObjectType(band)$equals('String'),
  # 当band是字符串时执行的操作
  ee$String("处理字符串类型的逻辑"),
  # 非字符串类型时执行的操作
  ee$Number(0)
)
  1. 其他类型判断的例子
    比如判断是否为数字类型(注意:GEE里Integer属于Number的子类,所以ee$Number(2)的类型会返回'Number',如果要单独判断整数,可以用取模运算辅助):
# 判断是否为Number类型
is_number <- ee$Algorithms$ObjectType(ee$Number(2))$equals('Number')

# 额外判断是否为整数
is_integer <- ee$Number(2)$mod(1)$equals(0)

补充说明

你之前测试ee$Algorithms$ObjectType(ee$Number(2))时,R控制台显示的EarthEngine Object: String只是这个ee对象的客户端打印格式,它在GEE服务器端的实际值是'Number'——用equals()就能正确获取这个服务器端的判断结果啦。

备注:内容来源于stack exchange,提问作者Arthur BAYLE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:15:29