r ncdf4 не может прочитать символьную переменную из netcdf - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь прочитать переменную из файла netcdf , содержащего символы

library(ncdf4)

NCFile <- nc_open('MD02_2575.age')
ncvar_get(NCFile, 'Label')

Я ожидаю

'KIA33119' 'KIA24904' 'KIA33120' 'KIA24905' 'KIA33121' 'KIA24906' 'KIA25875' 'KIA24907' 'KIA24903' 'User    ' 'User    ' 'User    ' 'User    ' 'User    '

в зависимости от того, что я получаю, когда читаюфайл с Matlab, но с RI get

[1] "KKKKKKKKKUUUUU" "IIIIIIIIIsssss" "AAAAAAAAAeeeee" "323232222rrrrr" "343434544     " "191919899     " "102020700     " "940516573     "

Я хотел бы использовать R. Это похоже на проблему кодирования, есть ли у кого-нибудь предложение, как получить чтение в переменных?

1 Ответ

0 голосов
/ 08 декабря 2018

Label - это двумерный массив с символами;

char Label(Label_Characters, Length);

Также ncdump испытывает трудности при преобразовании этого в список строк, например: ncdump -v Label MD02_2575.age также дает "неправильный"Результаты:

 Label =
  "KKKKKKKKKUUUUU",
  "IIIIIIIIIsssss",
  "AAAAAAAAAeeeee",
  "323232222rrrrr",
  "343434544     ",
  "191919899     ",
  "102020700     ",
  "940516573     " ;

Я написал «неправильно», потому что из самого файла NetCDF не ясно, что (1) отдельные символы должны быть объединены в строки, и (2), если это так,вдоль какого измерения должна выполняться конкатенация.Честно говоря, я удивлен, что ncdump, R и Matlab делают это?

Просто, чтобы проиллюстрировать проблему (используя Python):

import netCDF4 as nc4

f = nc4.Dataset('MD02_2575.age')
v = f.variables['Label'][:,:]

label1 = v[:,0].tostring()  # Correct
label2 = v[0,:].tostring()  # Same as `ncdump`, `R`, ..

print(label1, label2)

Результатов: 'KIA33119' 'KKKKKKKKKUUUUU'

...