说我有一个带有 pos 和 neg 整数以及 NA 和空白值的向量。我想运行一个循环来评估每个向量元素并返回它是什么类型的整数。这是一个例子
x <- c(-1, 1, NA, "")
for (i in 1:length(x)) {
if (x[i] <= 0) {
print("non-positive number")
} else if (x[i] > 0) {
print("positive")
} else {
print("not a number")
}
}
上面的代码适用于整数,但当遇到 NA 和空白时,它不会打印“不是数字”
我可以修改我的条件,但为什么最后一个 else 条件不起作用。
有什么想法吗?
您应该检查一个元素是否是NA
第一个:
x <- c(-1, 1, NA, "", "abc", NULL, 1000.2, "1000.2")
for (i in x) {
i_numeric <- tryCatch(as.numeric(i), warning = function(w) {})
if (is.null(i_numeric) || is.na(i_numeric)) {
print("not a number")
} else if (i <= 0) {
print("non-positive number")
} else if (i > 0) {
print("positive")
} else {
print("not a number")
}
}
注意:
一种。您不需要遍历length
of x
。
湾 @Darren Tsai 的评论是正确的,您的x
值是 R 中的字符:
"1" > 0
TRUE
但你应该意识到这一点。我已经编辑了我的答案,以包含奇怪的值,例如非空字符串和NULL
s。
编辑:正如评论中所指出的,你不能真正NULL
在 vector 中输入一个元素x
,它不会被迭代。你可以如果x
是一个列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句