outliersパッケージのrm.outlier関数の挙動がちょっと気に食わなかったのでググったら、同じことで悩んでいる人がいた。
Error in data.frame with rm.outlier function
何が気に食わないかというと、rm.outlier関数にdataframeを入れた場合、それぞれのcolumnから外れ値を除外したベクトルのリストが返される。このリストに含まれるベクトルの長さが一定ではないために、再びdataframeに戻すことができないため。
なので↓こうした。
outlier.na <- function(df) {
apply(df, 2, function(x) {
x[which(x == outlier(x))] <- NA
x
})
}
> nrow(iris)
[1] 150
> nrow(na.omit(outlier.na(iris[,-5])))
[1] 144