1

有一个 data.frame() 我想计算分位数的列:

tert <- c(0:3)/3
data <- dbGetQuery(dbCon, "SELECT * FROM tablename")
quans <- mapply(quantile, data, probs=tert, name=FALSE)

但是结果只包含分位数返回列表的最后一个元素,而不是整个结果。我也收到警告longer argument not a multiple of length of shorter。如何修改我的代码以使其正常工作?

PS:这个函数本身就像一个魅力,所以我可以使用一个 for 循环:

quans <- quantile(a$fileName, probs=tert, name=FALSE)

PPS:同样有效的方法是指定probs

quans <- mapply(quantile, data, name=FALSE)
4

2 回答 2

5

问题是mapply试图将给定函数依次应用于所有指定参数的每个元素。由于您只想对一个参数执行此操作,因此您应该使用lapply,而不是mapply

lapply(data, quantile, probs=tert, name=FALSE)

或者,您仍然可以使用mapply但指定不要在参数中循环的MoreArgs参数。

mapply(quantile, data, MoreArgs=list(probs=tert, name=FALSE))
于 2013-06-10T09:53:59.460 回答
0

我终于找到了一个我不喜欢但有点工作的解决方法。也许有人可以告诉正确的方法:

q <- function(x) { quantile(x, probs=c(0:3)/3, names=FALSE) }
mapply(q, data)

有效,不知道区别在哪里。

于 2013-06-10T09:52:52.283 回答