如何使用R读取存储为位掩码的值?

如何使用R读取存储为位掩码的值?,r,R,我已从下载了一个nc文件 f=open.ncdf("0101.nc") dimensions:" [1] "Longitude Size: 1440" [1] "Latitude Size: 720" [1] "------------------------" 然后我想使用这个:位掩码 A = get.var.ncdf(nc=f,varid="mask",verbose=TRUE) 我键入了A,但我发现值是 0 2 4 6 8 12 16 24 32 34 40 64

我已从下载了一个nc文件

f=open.ncdf("0101.nc")
dimensions:"
[1] "Longitude   Size: 1440"
[1] "Latitude   Size: 720"
[1] "------------------------"
然后我想使用这个:
位掩码

A = get.var.ncdf(nc=f,varid="mask",verbose=TRUE)
我键入了
A
,但我发现值是

       0 2 4 6 8 12 16 24 32 34 40 64 128
然而,文件的创建者说这是位掩码,并给了我以下分类:


zen条件包含在位掩码中,第一位(如2^1;按照C约定,我们从第零位开始计数)处于启用状态。以下是位定义列表:

当尝试以二进制格式高效存储数据时,这些类型的make字段并不少见。首先,我们可以将2^n值表转换为整数进行解码

vv<-c("not land"=1,"ice"=2, "no valid data"=4, "high depth"=8,
    "high depth in band"=16, "negatl depth in-band"=32,
    "negepth in-band"=64, "no tband"=128, "no nband"=256)
decode<-function(x) {
    sapply(x, function(z) {
        paste(names(vv[bitwAnd(z,vv)>0]), collapse=",")
    })
}
或者你可以一次解码一个

decode(16)
# [1] "high depth in band"
如果执行解码(24),您将看到某些值是标志的组合。24是8+16,所以它有两个标志。34等于2+32。decode函数将值与“,”一起粘贴
decode(16)
# [1] "high depth in band"