有一个data.frame()我想要计算分位数的列:
tert <- c(0:3)/3
data <- dbGetQuery(dbCon, "SELECT * FROM tablename")
quans <- mapply(quantile, data, probs=tert, name=FALSE)
Run Code Online (Sandbox Code Playgroud)
但结果只包含分位数返回列表的最后一个元素,而不是整个结果.我也收到警告longer argument not a multiple of length of shorter.如何修改我的代码才能使其正常工作?
PS:单独的功能就像魅力一样,所以我可以使用for循环:
quans <- quantile(a$fileName, probs=tert, name=FALSE)
Run Code Online (Sandbox Code Playgroud)
PPS:什么也有效不指定probs
quans <- mapply(quantile, data, name=FALSE)
Run Code Online (Sandbox Code Playgroud)
问题是mapply尝试将给定函数按顺序应用于所有指定参数的每个元素.既然你只想为一个参数做这个,你应该使用lapply,而不是mapply:
lapply(data, quantile, probs=tert, name=FALSE)
Run Code Online (Sandbox Code Playgroud)
或者,您仍然可以使用mapply但指定不在参数中循环的MoreArgs参数.
mapply(quantile, data, MoreArgs=list(probs=tert, name=FALSE))
Run Code Online (Sandbox Code Playgroud)