目前,这更像是一个思想实验。
所以,我正在尝试编写一个非常基本的递归函数:
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.vector
将integer(0)
- 这不是NULL
。 a.vector
将为空,但我不知道任何检查空虚的函数。同样,integer(0) ==FALSE
将返回logical(0)
- 顺便说一句,不是FALSE
,就像integer(0) ==TRUE
一样。
编辑:我正在尝试处理的数据类型是:
a.vector <-c( "bla", 1010, "yadayadayada")
当然,我可以使用length(a.vector) ==0
但这有点毫无意义。然后,该功能的整个目的可能看起来毫无意义。我试图看看有什么用,现在我做了,我想知道是否或为什么没有检查空虚的功能。另外,由于我不是程序员,我不知道如何检查空虚。
答案 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