我对R有点问题,我不知道为什么。它告诉我这一行:if(temp > data[[k]][[k2]]) {
的参数长度为0.这是一个不大的块:
for(k in 1:length(data)) {
temp <- 0
for(k2 in 3:length(data[[k]])) {
print(data[[k]][[k2]])
if(temp > data[[k]][[k2]]) {
temp <- data[[k]][[k2]]
}
fMax[k] <- temp
k2 <- k2 + 1
}
k <- k + 1
}
数据[[k]] [[k2]]中的内容示例:
[1] "3050"
[1] "3051"
[1] "3054"
[1] "3054"
[1] "3052"
[1] "3053"
[1] "3059"
[1] "3059"
[1] "3057"
[1] "3060"
[1] "3063"
[1] "3060"
[1] "3068"
[1] "3067"
[1] "3079"
[1] "3085"
[1] "3094"
[1] "3107"
[1] "3121"
[1] "3135"
[1] "3147"
[1] "3161"
[1] "3200"
[1] "3237"
[1] "3264"
[1] "3274"
[1] "3284"
[1] "3289"
[1] "3292"
[1] "3300"
[1] "3301"
[1] "3303"
[1] "3306"
[1] "3310"
[1] "3312"
[1] "3313"
[1] "3319"
[1] "3314"
[1] "3318"
[1] "3318"
[1] "3320"
[1] "3322"
[1] "3322"
[1] "3322"
[1] "3328"
[1] "3332"
[1] "3338"
[1] "3350"
[1] "3358"
[1] "3378"
[1] "3395"
[1] "3402"
[1] "3875"
[1] "3950"
[1] "3988"
[1] "4018"
[1] "4039"
[1] "4048"
[1] "4057"
[1] "4062"
[1] "4067"
[1] "4076"
[1] "4082"
[1] "4085"
[1] "4092"
[1] "4098"
[1] "4099"
[1] "4101"
[1] "4107"
[1] "4119"
[1] "4139"
[1] "4164"
[1] "4231"
[1] "4347"
[1] "4559"
谢谢 - 山姆
答案 0 :(得分:82)
“参数长度为零”是一个非常具体的问题,来自我最不喜欢的R元素之一。让我演示一下这个问题:
> FALSE == "turnip"
[1] FALSE
> TRUE == "turnip"
[1] FALSE
> NA == "turnip"
[1] NA
> NULL == "turnip"
logical(0)
正如您所看到的,与NULL的比较不仅不会产生布尔值,它们根本不会产生值 - 并且控制流倾向于期望检查会产生某些种类的输出。当它们产生零长度输出时......“参数长度为零”。
(我有很长时间的咆哮,为什么这会让我如此激怒。它可以等待。)
所以,我的问题;什么是sum(is.null(data[[k]]))
的输出?如果它不是0,则在数据集中嵌入NULL值,并且需要删除相关行,或者将检查更改为
if(!is.null(data[[k]][[k2]]) & temp > data[[k]][[k2]]){
#do stuff
}
希望这会有所帮助;没有整个数据集很难说清楚。如果它没有帮助,并且问题不在某个地方进入NULL值,我恐怕不知道。
答案 1 :(得分:10)
相同的错误消息不仅会导致null
,还会导致例如factor(0)
。 if(length(element) > 0 & otherCondition)
。在这种情况下,查询必须为if(!is.null(element) & length(element) > 0 & otherCondition)
或更好地使用{{1}}检查这两种情况。
答案 2 :(得分:6)
在这种情况下,您可以使用isTRUE
。 isTRUE
与{ is.logical(x) && length(x) == 1 && !is.na(x) && x }
如果您使用闪亮的,可以使用isTruthy
,它涵盖以下情况:
错误
NULL
“”
空原子向量
仅包含缺失值的原子向量
包含所有FALSE或缺失值的逻辑矢量
“ try-error”类的对象
代表未单击的actionButton()的值
答案 3 :(得分:0)
当长度为0的整数而不是NULL输出时,参数的长度为零。 整数(0)。
您可以通过找到输出的类别进一步验证我的观点-
>class(output)
“整数”
答案 4 :(得分:0)
我花了整整一整天对此事扑朔迷离,解决方法很简单。
R不是零索引。
我以前使用的每种编程语言的数据都从0开始,R从1开始。 结果是一个错误的错误,但方向与通常相反。 超出数据结构的范围将返回null,并且在if语句中比较null会得出参数长度为零的错误。混乱之所以开始是因为数据集不包含任何null,并且像其他任何pgramming语言一样,它是从位置[0]开始出现的。
对于没有编程经验的人(R的目标市场?)来说,也许从1开始更有意义,但是如果您不知道这一点,对于程序员来说,这才是真正的抓手。
答案 5 :(得分:0)
最简单的解决方法是更改for循环语句:
代替使用
for (i in **0**:n))
使用
for (i in **1**:n))