确定R中的空虚而不必使用length()

时间:2014-04-12 08:54:36

标签: r recursion string

目前,这更像是一个思想实验。

所以,我正在尝试编写一个非常基本的递归函数:

omnom <-function( a.vector, n ){
    if( SOME.FUN( a.vector ){
        n <-n +1
        omnom( a.vector[-1], n)
    }

return( n )
}

函数omnom采用向量和计数变量,并返回向量中的元素数,即omnom()length()的作用相同。它通过检查某些条件递归地执行此操作 - 如果它是TRUE该函数将1添加到'n'并使用减少的向量和当前状态n调用自身。

我的问题:我可以为SOME.FUN()使用什么?我尝试了is.null(),但如果omnom()吞噬了所有元素,则a.vectorinteger(0) - 这不是NULLa.vector将为空,但我不知道任何检查空虚的函数。同样,integer(0) ==FALSE将返回logical(0) - 顺便说一句,不是FALSE,就像integer(0) ==TRUE一样。

编辑:我正在尝试处理的数据类型是:

a.vector <-c( "bla", 1010, "yadayadayada")

当然,我可以使用length(a.vector) ==0但这有点毫无意义。然后,该功能的整个目的可能看起来毫无意义。我试图看看有什么用,现在我做了,我想知道是否或为什么没有检查空虚的功能。另外,由于我不是程序员,我不知道如何检查空虚。

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助。我拿出了omnom的嵌套电话,这样你就可以看到发生了什么。我们可以使用character(0)paste

来绕过paste0
> nzchar(paste0(character(0), collapse = ""))
[1] FALSE

> omnom <-function( a.vector, n ){
      if( nzchar(paste0(a.vector, collapse = "")) ){ n <- n +1 }            
      return(n)
  }
> omnom(1:10, n = 3)
[1] 4
> omnom(NA, n = 3)
[1] 4
> omnom(character(0), n = 3)
[1] 3
> vec <-c( "bla", 1010, list(), "yadayadayada", data.frame( a =1, b =2 ))
> omnom(vec, n = 3)
[1] 4