我的问题类似于这些enter link description here和enter link description here,但我的问题更复杂,因为它需要多个dplyr操作和延迟评估。
这是我的功能:
HDF5 format
然后,我想通过do.call传递每个列名作为参数。
stats <- function(col_names){
require("dplyr")
data %>%
group_by_(col_names) %>%
summarise(Count = n()) %>%
mutate(Percent = prop.table(Count)) -> temp
write.csv(temp, file=paste(col_names,".csv",sep="_"))}
但我得到一个常见的错误:
colnames <- names(data)
do.call(stats, as.list(col_names))
如果我单独输入列名,则该功能有效。但我需要超过1000列,所以我需要自动化该过程。
答案 0 :(得分:0)
do.call
用于为函数的单个执行提供多个函数参数。例如,我们可以使用参数列表,而不是编写paste('c', 1:2)
,以便do.call(paste, list('c', 1:2))
给出相同的结果。
因此,在您的情况下,do.call
与运行stats(col1, col2, col3, ...)
相同。您可以很容易地看到这不起作用,因为stats
只接受一个参数。这就是为什么你得到的错误说明了未使用的参数。
您想要做的是使用单个参数运行您的函数多次次。一种方法是lapply
:
lapply(names(data), stats)