我在R中有2个向量,但两个中的一些值都标记为“NULL”。
我希望R忽略“NULLS”,但由于索引(我使用交叉和哪个函数)仍然“确认”它们的存在。
我试过这个:
for i in 1:length(vector)
if vector=="NULL"
i=i+1
else
'rest of the code'
这是一个好方法吗?算法正在运行,但矢量非常大。
答案 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
}
}
但即使这不是很喜欢。相反,你会做两件事:
使用子集来摆脱NA
值:
vector[! is.na(vector)]
使用*apply
functions之一(例如,sapply
)而不是循环,并将循环体放入函数中:
sapply(vector[! is.na(vector)], function (x) Do something with x)