Я сталкиваюсь с очень запутанным поведением из функции apply в базе R. По сути, мой код выполняет подсчет экземпляров значения до и после переменной даты
beforedates2008 = c('11/02', '11/03', '11/04')
beforedates2010 = c()
beforedates2012 = c('11/02', '11/03', '11/04', '11/05', '11/06')
beforedates2014 = c('11/02', '11/03', '11/04')
beforedates2016 = c('11/02', '11/03', '11/04', '11/05', '11/06', '11/07', '11/08')
befores = list(beforedates2008, beforedates2010, beforedates2012, beforedates2014, beforedates2016)
before_nonv <- function(row_cur){
return(sum(row_cur[10:14][sapply(befores, function(y) row_cur[18] %in% y)] == 0 | is.na(row_cur[10:14][sapply(befores, function(z) row_cur[18] %in% z)])))
}
be_t = apply(subs_dates, 1, before_nonv)
Мои данные называются subs_dates, и чтобы дать вам представление о том, что происходит не так
be_t[1:10]
Возвращает
22 43 76 317 387 444 520 523 660 734
0 0 0 0 0 0 0 0 0 0
В то время как другой путь выглядит так:
apply(subs_dates[1:10, ], 1, before_nonv)
Возвращает
22 43 76 317 387 444 520 523 660 734
0 3 0 1 3 0 1 0 0 0
Вторая из двух верна. Выполнение apply(subs_dates[1:nrow(subs_dates), ], 1, before_nonv)
дает тот же неправильный ответ, что и общий, однако, применяется большее значение.
Ссылка на диск Google на данные для воспроизводимости:
https://drive.google.com/file/d/15pDdUbQIS1pk4C1pt1e0dx2hu16Dunnm/view?usp=sharing