有一个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)
答案 0 :(得分:5)
问题是mapply
正在尝试将给定函数按顺序应用于指定参数的所有的每个元素。由于您只想为一个参数执行此操作,因此应使用lapply
,而不是mapply
:
lapply(data, quantile, probs=tert, name=FALSE)
或者,您仍然可以使用mapply
,但在MoreArgs
参数中指定 not 的参数。
mapply(quantile, data, MoreArgs=list(probs=tert, name=FALSE))
答案 1 :(得分:0)
我终于找到了一个解决方法,我不喜欢但有点工作。也许有人可以告诉正确的方式:
q <- function(x) { quantile(x, probs=c(0:3)/3, names=FALSE) }
mapply(q, data)
有效,不知道差异在哪里。