R - аргумент имеет нулевую длину в выражении if
У меня проблема с 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"
Спасибо - Сэм
Ответы
Ответ 1
"аргумент имеет длину ноль" - очень специфическая проблема, которая исходит от одного из моих наименее популярных элементов 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, я боюсь, что понятия не имею.
Ответ 2
То же сообщение об ошибке приводит не только к null
, но и к примеру. factor(0)
. В этом случае запрос должен быть if(length(element) > 0 && otherCondition)
или проверить оба случая с if(!is.null(element) && length(element) > 0 && otherCondition)
.