项目场景:
在Rstudio进行for循环和if嵌套时,出现错误:判断函数xxxx变量长度为0时
Error in if (xxxx) { : argument is of length zero
我定义了一个函数用来检测指定向量的元素是否有目标向量,然后在另外一个函数中调用执行n次判断概率
#检测目标字段与相邻字段是否同时出现
xxxx<-function(array)
{
for(i in c(1:52))
{
if("目标字段" %in% array[i])
{
if("目标字段2" %in% cd[i+1])
{
return(T)
}else if(i==51)
{
next
}
}else if(i==51)
{
return(F)
}
}
}
#执行n次求出现概率
XXXX2<-function(n)
{
res<-0
for(j in c(1:n))
{
array<-sample(org_array, 100, replace = FALSE)
if((xxxx(array))) #这里是出错的位置
{
res<-res+1
print(res)
}else
{
next
}
}
p<- res / n
print(p)
}
问题描述
报错信息如下:
Error in if (xxxx(array)) { : argument is of length zero
原因分析:
布尔型函数xxxx返回值可能为NULL
虽然设置了返回值,但是可能因为多层嵌套的原因返回值出现null
解决方案:
'is.null'如果它的参数是'NULL'和'FALSE',则返回'TRUE',否则返回 。
NULL值可以用is.null测试
修改判断条件如下:
if(!is.null(函数) && length(函数) == 1 && !is.na(函数) && (函数) )
if(!is.null(xxxx(array)) &&
length(xxxx(array)) == 1 &&
!is.na(xxxx(array)) &&
xxxx(array))
此时代码可以正常运行