У меня проблема с функцией, проблема в том, когда я ее запускаю:
selectTrialAnimals <- function(data, nB, nZ, minWeight){
buitenProef <- data[!is.na(Opm.)]
tempBiggen <- data[is.na(Opm.)]
tempBiggen <- tempBiggen[order(Sex,Speen_gew)]
biggenB <- tempBiggen[Sex=="B"]
biggenZ <- tempBiggen[Sex=="Z"]
if (nrow(biggenB[Speen_gew >= minWeight]) >= nB){
tempBuitenProefB <- biggenB[Speen_gew < minWeight ]
biggenB <- biggenB[Speen_gew >= minWeight]
}else{
tempBuitenProefB <- biggenB[1: (nrow(biggenB) - nB)]
biggenB <- biggenB[(nrow(biggenB) - nB + 1):nrow(biggenB)]
}
if (nrow(biggenZ[Speen_gew >= minWeight]) >= nZ){
tempBuitenProefZ <- biggenZ[Speen_gew < minWeight ]
biggenZ <- biggenZ[Speen_gew >= minWeight]
}else{
tempBuitenProefZ <- biggenZ[1: (nrow(biggenZ) - nZ)]
biggenZ <- biggenZ[(nrow(biggenZ) - nZ + 1):nrow(biggenZ)]
}
while (nrow(biggenB) > nB| nrow(biggenZ) > nZ){
if (nrow(biggenB) > nB){
if (biggenB[,mean(Speen_gew)] > (biggenZ[,mean(Speen_gew)])){
tempBuitenProefB <- rbind(tempBuitenProefB,biggenB[nrow(biggenB)])
biggenB <- biggenB[-nrow(biggenB)]
}
if (biggenB[,mean(Speen_gew)] < (biggenZ[,mean(Speen_gew)])){
tempBuitenProefB <- rbind(tempBuitenProefB,biggenB[1])
biggenB <- biggenB[-1]
}
}
if (nrow(biggenZ) > nZ){
if (biggenZ[,mean(Speen_gew)] > (biggenB[,mean(Speen_gew)])){
tempBuitenProefZ <- rbind(tempBuitenProefZ,biggenZ[nrow(biggenZ)])
biggenZ <- biggenZ[-nrow(biggenZ)]
}
if (biggenZ[,mean(Speen_gew)] < (biggenB[,mean(Speen_gew)])){
tempBuitenProefZ <- rbind(tempBuitenProefZ,biggenZ[1])
biggenZ <- biggenZ[-1]
}
}
}
tempBuitenProef <- rbindlist(list(buitenProef,tempBuitenProefB, tempBuitenProefZ))
tempBuitenProef <- tempBuitenProef[order(Sex,Speen_gew)]
tempBiggen <- rbind(biggenB, biggenZ)
return(list(AnimalsInTrial = tempBiggen, AnimalsOutTrial = tempBuitenProef))
}
Он добавляет дополнительный набор имен столбцов в конец возвращаемой таблицы data.table. Примерно так (показана только часть результата):
$AnimalsOutTrial
Sex Oornr Geb_dat Zeugnr Beer Geb_gew Speen_gew oud K.H. Opm.
1: B 84001 2020-04-24 18/114 WESLY 0.7 2.2 26 25 breuk
2: B 83974 2020-04-23 17/67 WESLY 1.3 3.2 27 24 <NA>
.....
37: Z 84081 2020-04-25 18/120 WESLY 0.9 5.3 25 30 <NA>
38: Z 84085 2020-04-25 18/120 WESLY 1.2 7.0 25 30 dikke poot
Sex Oornr Geb_dat Zeugnr Beer Geb_gew Speen_gew oud K.H. Opm.
Проблема в том, что я не могу воспроизвести его с тестовыми данными:
test <- data.table(Sex=c("B","B","Z","Z","B","B","Z","Z"),Opm.=c(NA,"x",NA,NA,"x",NA,NA,NA),Speen_gew=c(1,2,3,5,2,8,7,9))
Это выполняется, как ожидалось, на входе. Я не могу предоставить полные исходные данные, поскольку они конфиденциальны. Кто-нибудь сталкивался с таким поведением раньше и как я могу с этим справиться? Заранее спасибо!