从字符串中评估NA_integer_

时间:2017-11-01 15:39:23

标签: r integer na

如何读取foo = Foo.objects.filter(common=True) 之类的值(来自文件)并让R解释它,就像明确键入"NA_integer"一样。

以下是我失败的两次尝试:

NA_integer

这是我能得到的最接近的。但我不喜欢它,因为它牺牲了很多普遍性。

q <- "NA_integer_"
get(q)        # Returns "Error in get(q) : object 'NA_integer_' not found"
eval(q)       # Returns the character value

修改:添加了尾随下划线

2 个答案:

答案 0 :(得分:5)

根据?NA

  

NA是长度为1的逻辑常量,包含缺失值   指示符。除了原始NA之外,NA可以被强制转换为任何其他矢量类型。   还有常数NA_integer_,NA_real_,NA_complex_和   支持缺失的其他原子向量类型的NA_character_   值:所有这些都是R语言中的保留字。

所以我们需要

q <- "NA_integer_"

然后使用

eval(parse(text=q))
#[1] NA

答案 1 :(得分:1)

也许在读取文件时设置na.strings参数,请参见下面的示例:

# dummy file
write.csv(data.frame(myCol = c(1:2, "NA", "NA_integer_")),
          "myFile.csv")


# this reads only NA as NA, and column is class of Factor, not what we want...
df1 <- read.csv("myFile.csv")
is.na(df1$myCol)
# [1] FALSE FALSE  TRUE FALSE
str(df1)
# 'data.frame': 4 obs. of  2 variables:
#   $ X    : int  1 2 3 4
#   $ myCol: Factor w/ 3 levels "1","2","NA_integer_": 1 2 NA 3


# once we set na.strings, it reads both NAs and NA_integer_ as NAs and column is class of int.
df1 <- read.csv("myFile.csv", na.strings = c("NA", "NA_integer_"))
is.na(df1$myCol)
# [1] FALSE FALSE  TRUE  TRUE
str(df1)
# 'data.frame': 4 obs. of  2 variables:
#   $ X    : int  1 2 3 4
#   $ myCol: int  1 2 NA NA