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

如何用R语言stars包获取栅格数据的属性值?

问题:使用stars包读取自定义TIFF数据集无法查看栅格属性值

我用R语言的stars包查看自带测试TIFF文件的栅格属性值完全正常,但对自己下载的公开TIFF数据集执行相同操作时,无法获取预期的属性值。

测试文件操作(成功)

# 加载包
library(stars)

# 读取自带测试数据
dfrt <- read_stars(system.file('tif/L7_ETMs.tif', package = 'stars'))
# 查看子集属性值
dfrt[[1]][1:5, 1:5, 1]

执行结果:

, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]   69   74   68   61   60
[2,]   69   68   64   61   63
[3,]   63   59   61   63   65
[4,]   60   58   60   60   58
[5,]   61   58   59   56   57

自定义数据集操作(失败)

下载并读取公开数据集的代码:

# 下载并解压文件
download.file(paste('https://dataverse.harvard.edu/file.xhtml?persistentId', 
                    'doi:10.7910/DVN/YSWMDR/FUQ16M&version=1.1', sep = '='), 
              'BUPR.tar.gz')
untar('BUPR.tar.gz', files = file.path('BUPR', 'BUPR_2010.tif'))

# 读取文件(使用proxy参数)
dfdp <- read_stars('BUPR_2010.tif', proxy = TRUE)

该数据集的对象信息:

stars_proxy object with 1 attribute in 1 file(s):
$BUPR_2010.tif
[1] "[...]/BUPR_2010.tif"

dimension(s):
  from    to   offset delta                       refsys point values x/y
x    1 18459 -2356399   250 USA_Contiguous_Albers_Equ... FALSE   NULL [x]
y    1 11615  3172999  -250 USA_Contiguous_Albers_Equ... FALSE   NULL [y]

解决方案

问题核心是:自定义数据集读取时使用了proxy = TRUE,创建的是**stars_proxy延迟加载对象**,而测试文件是直接加载到内存的stars对象。stars_proxy不会立即把数据读入内存,仅保留文件引用,必须显式触发数据加载才能提取属性值。

方法1:直接读取到内存(适合小数据集)

去掉proxy = TRUE参数,直接将整个数据集加载到内存,之后即可用测试文件的方法查看属性值:

dfdp <- read_stars('BUPR_2010.tif')
# 查看前5x5的属性值
dfdp[[1]][1:5, 1:5]

方法2:保留proxy,触发部分数据加载(适合大数据集)

如果数据集过大,不想一次性加载全部内存,可以通过子集提取操作触发局部数据加载:

# 方式1:用slice提取指定范围并加载
dfdp_sub <- dfdp %>% 
  slice(x, 1:5) %>% 
  slice(y, 1:5)
# 查看提取的子集值
dfdp_sub[[1]]

# 方式2:直接索引子集并强制加载
dfdp_sub <- dfdp[1:5, 1:5]
dfdp_sub[[1]]

内容的提问来源于stack exchange,提问作者DOS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:39:57