Есть несколько проблем с циклом for (даже если x
не содержит значений NA
):
- В первой итерации (
i == 1
), x[i-1]
относитсяв x[0]
, который не определен, так как индексирование в R начинается с 1
. - Код использует цикл for, где могут использоваться векторизованные функции.
К сожалению, запускцикл в i == 2
, то есть for (i in 2:length(x))
, не защищен от ошибок в случае одноэлементного вектора, где length(x) == 1
.
Я предлагаю использовать векторизованную версию
number_rn_vec <- function(x) {
n <- length(x)
sum(x[2:n] == 0 & x[1:(n - 1)] > 0, na.rm = TRUE)
}
Это вернет a
без ошибок для многих случаев использования:
sapply(
list(
c(),
c(1),
c(1, 0),
c(1, 0, 3),
c(0, 1, 0, 3),
c(NA, 1, 0, 3),
c(1, NA, 0, 3),
c(1, 0, NA, 3),
c(1, 0, 3, NA)
),
number_rn_vec
)
[1] 0 0 1 1 1 1 0 1 1