我使用R的。call接口到C传递和返回实值向量(REALSXP),其中可能包括NA值。对于传入C的向量,我需要检测NA值的存在性,对于从C返回的向量,我需要分配NA值。
假设vec
是一个SEXP
对象,它等于一个包含REALSXP
对象的向量。例如,如果在C中分配这个,代码可能是
SEXP vec;
PROTECT(vec = allocVector(REALSXP, 10));
关于检测NA值,我知道以下操作将起作用:
isnan(vec[index])
其中isnan()
在math.h
中定义。这是检测NA值的首选方法吗?
我不知道如何分配NA值。我知道我可以做如下的事情,
vec[index] = 0.0/0.0;
分配NaN。我不确定NaN和NA在R中的确切区别是什么,但我更愿意分配NA而不是NaN。
编辑
找到了答案。函数ISNA()
和ISNAN()
在R_ext/arithp .h中定义,符号R_NaReal
也在R_ext/arithp .h中定义,用于指定NA值
找到我问题的答案了。函数ISNA()
和ISNAN()
在R_ext/arithp .h中定义,符号R_NaReal
也在R_ext/arithp .h中定义,用于指定NA值