GNU Octave:使用 textscan(...) 读取具有 NA 值的数据

GNU Octave: reading data with NA values using textscan(...)

我需要从缺失值以 NA 形式给出的 ASCII 文件中读取数据。使用 textscan(...) 似乎不起作用,因为 textscan(...) 似乎在第一次出现 NA 时停止 reading/parsing。

下面是该问题的简单演示:

x = textscan ( "1 ; 2 ; 3\n4 ; NA ; 6" , '%d %d %d' , 'Delimiter' , ';' , 'ReturnOnError' , false )
error: textscan: Read error in field 2 of row 2

我也试图告诉 textscan(...) 将 NA 解释为 "empty value",但没有成功:

x = textscan ( "1 ; 2 ; 3\n4 ; NA ; 6" , '%d %d %d' , 'Delimiter' , ';' , 'TreatAsEmpty' , 'NA' , 'ReturnOnError' , false )
error: textscan: Read error in field 2 of row 2

谁能解释一下这是怎么回事,或者如何让它发挥作用?

请注意,这只是一个用于说明问题的简化示例。我文件中数据的格式有点复杂,我真的依赖 textscan(...) 来解析它;我不认为没有 textscan(...) 我可以轻松做到这一点。

(我是 运行 Octave 4.2.1。)

NA 是为浮点数定义的,因此您应该使用 '%f' 转换说明符而不是 '%d'.

x = textscan ( "1 ; 2 ; 3\n4 ; NA ; 6" , '%f %f %f' ,
    'Delimiter' , ';' , 'ReturnOnError' , false )