R字符值为null,但是失败了is.null()test

时间:2015-09-08 17:58:50

标签: r

对于非空值的非常奇怪的错误,但声称为null,即使它在is.null()测试中的计算结果为FALSE。见下文。在这种情况下,pid似乎为null,但测试失败,导致代码中出现各种“下一步”问题。

> pid <- system2('ps', args = "-ef | grep 'ssh -f' | grep -v grep | tr -s ' ' | \ cut -d ' ' -f 3", stdout = TRUE)
> pid
character(0)
> is.null(pid)
[1] FALSE
> if(!is.null(pid) && nchar(pid)) {cat('got some pid')}
Error in if (!is.null(pid) && nchar(pid)) { : 
  missing value where TRUE/FALSE needed
> if(!is.null(pid)) {cat('got some pid? Really?')}
got some pid? Really?

人们认为这里发生了什么?这是我的R版本信息:

> version
               _                           
platform       x86_64-pc-linux-gnu         
arch           x86_64                      
os             linux-gnu                   
system         x86_64, linux-gnu           
status                                     
major          3                           
minor          2.2                         
year           2015                        
month          08                          
day            14                          
svn rev        69053                       
language       R                           
version.string R version 3.2.2 (2015-08-14)
nickname       Fire Safety         

操作系统的完整版本:

Linux rserver 3.16.0-44-generic #59~14.04.1-Ubuntu SMP Tue Jul 7 15:07:27 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

最后,我只想运行此代码:

> if (nchar(pid) > 0) {
+     cat('do something\n')
+ }
Error in if (nchar(pid) > 0) { : argument is of length zero

1 个答案:

答案 0 :(得分:4)

你有一个空字符变量的事实并不意味着它是NULL。这是一个例子:

pid <- character()
> pid
character(0)
> is.null(pid)
[1] FALSE
> pid <- NULL
> pid
NULL
> is.null(pid)
[1] TRUE