我从R: iterative outliers detection获取了以下功能(这是更新版本):
dropout<-function(x) {
outliers <- NULL
res <- NULL
if(length(x)<2) return (1)
vals <- rep.int(1, length(x))
r <- chisq.out.test(x)
while (r$p.value<.05 & sum(vals==1)>2) {
if (grepl("highest",r$alternative)) {
d <- which.max(ifelse(vals==1,x, NA))
res <- rbind(list(as.numeric(strsplit(r$alternative," ")[[1]][3]),as.numeric(r$p.value)),fill=TRUE)
}
else {
d <- which.min(ifelse(vals==1, x, NA))
}
vals[d] <- r$p.value
r <- chisq.out.test(x[vals==1])
}
return(res)
}
问题是在每一轮中它都会给我一些缺少的行来填充data.frame
我想填充res
但在某些迭代中它包含缺失的值。
我使用了所有可能的东西,例如rbindlist, rbind.fill, rbind (with fill=TRUE)
,但没有任何效果。
当我做类似的事情时:
res <- c(res,as.numeric(strsplit(r$alternative," ")[[1]][3]),as.numeric(r$p.value))
它有效,但它为每组(V1,V2)创建了2行,最后一列为r$alternative
,第二行具有相同的前2列但p-value
为而是最后一列。
这就是我如何调用与上述问题类似的数据函数:
outliers <- d[, dropout(V3), list(V1, V2)]
我总是得到这个错误:j doesn't evaluate to the same number of columns for each group