检查变量是否为空字符串

37

在脚本中,有时会使用''(表示:完全为空)来填充变量。

variable <- ''

有人知道一种检查变量是否具有值''的方法吗?

is.null(variable)似乎不起作用。 ''NULL不同。

3个回答

39

''是一个空字符。它并不意味着“完全为空”——那才是NULL

要测试它,只需检查相等性:

if (variable == '') …

然而,您收到的错误信息

需要 TRUE/FALSE 值的位置缺少值

意味着您的变量中存在缺失值,即 NAif 无法处理缺失值。由于许多计算本身包含一个 NA 值,因此会出现 NA。例如,将 NA 与任何值(甚至是 NA 本身)进行比较仍然会产生 NA

variable = NA
variable == NA
# [1] NA

由于if需要TRUEFALSE,所以无法处理NA。如果您的值可能是NA,则需要明确检查:

if (is.na(variable) || variable == '') …

然而,通常最好从一开始就排除数据中的NA值,以免它们传播到像上面那样的情况。


@user1983395,确实,那是完全不同的问题。让我修改我的答案。 - Konrad Rudolph
2
一个老的线程,但我看到这里给出的特定错误响应是不正确的。 "缺少值需要TRUE / FALSE"错误并不意味着变量不存在,而是设置为NA(缺失值代码)。如果它不存在,错误将是“对象'variable'未找到”。R抱怨因为逻辑未定义; NA既不等于也不等于任何东西,因为它表示该值丢失,因此可以是任何一个。使用is.na()和布尔运算符&&||来定义在发现缺失时应该执行什么操作。 - Aaron left Stack Overflow
如果variable是一个列表,这个测试将会给出以下警告:the condition has length > 1 and only the first element will be used。如果想要测试整个列表是否为空字符串,并避免警告,则可以尝试使用all(variable = '')进行测试。 - PatrickT
@PatrickT 是的,这个答案假定变量的类型是 character。列表的行为基本上不同。请注意,您的比较缺少一个 =:它应该是 ==,而不是 = - Konrad Rudolph
1
@PatrickT 除了极少数例外情况,给定代码块中变量的类型应该是众所周知和固定的。不幸的是,R在这方面并不太有帮助,但编程人员在编写代码时需要跟踪这些信息。没有通用的解决方案来处理任意类型,代码必须做出假设,如果用户违反这些假设,则代码失败是完全可以接受的(这被称为fail-fast)。 - Konrad Rudolph
显示剩余4条评论

3
stringi包中有一个处理此问题的函数。
require(stringi)    
stri_isempty(c("A","")) 

你也可以从github安装这个软件包: https://github.com/Rexamine/stringi

1
如果您希望一次性检查和替换这些值为NA,通常情况下,只需使用dplyr::na_if():
variable <- ''
dplyr::na_if(variable, "")
#> [1] NA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接