R忽略NULL值

时间:2014-05-30 18:12:34

标签: r

我在R中有2个向量,但两个中的一些值都标记为“NULL”。

我希望R忽略“NULLS”,但由于索引(我使用交叉和哪个函数)仍然“确认”它们的存在。

我试过这个:

for i in 1:length(vector)
    if vector=="NULL"
        i=i+1
    else
        'rest of the code'

这是一个好方法吗?算法正在运行,但矢量非常大。

2 个答案:

答案 0 :(得分:0)

你应该改变" NULL"对于NA,这是R值的NULL值的本机表示。然后很多函数都有处理NA值的方法,例如na.action选项......你不应该调用你的向量'向量'因为这是班级的保留词。

yourvector[yourvector == "NULL"] <- NA

此外,你不应该在你的if中添加1,只是不做任何事情:

for (i in 1:length(yourvector)) {
    if (!is.na(yourvector[i])) {
        #rest of the code
    }
}

还要告诉你想做什么。你可能不需要一个。

答案 1 :(得分:0)

此代码包含多个错误:

首先,矢量通常不能包含NULL值。你可能正在使用list吗?

if vector=="NULL"
你可能意味着if (vector[i] == "NULL")。即便如此,那也是错的。您无法通过与字符串NULL进行比较来过滤"NULL" - 这两者根本不同。您需要使用函数is.null。或者,如果您正在使用包含NA值的实际向量(不是NULL,就像我说的那样,那是不可能的),类似于is.na

i=i+1

此代码没有意义 - 将其删除不会更改结果,因为循环负责递增i

最后,不要迭代索引 - for (i in 1 : length(x))是R中的错误样式。相反,直接迭代元素:

for (x in vector) {
    if (! is.na(x)) {
        Perform action
    }
}

但即使这不是很喜欢。相反,你会做两件事:

  1. 使用子集来摆脱NA值:

    vector[! is.na(vector)]
    
  2. 使用*apply functions之一(例如,sapply)而不是循环,并将循环体放入函数中:

    sapply(vector[! is.na(vector)], function (x) Do something with x)