Применить возвращающийся разный ответ для разных размеров, R - PullRequest
0 голосов
/ 06 мая 2018

Я сталкиваюсь с очень запутанным поведением из функции 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

...