do.call 对于所有具有延迟评估和 dplyr 函数的数据框列
do.call for all dataframe columns with lazy evaluation and dplyr function
我的问题与这些enter link description here and 类似,但我的问题更复杂,因为它需要多个 dplyr 操作和惰性求值。
这是我的功能:
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="_"))}
然后,我想将每个列名作为参数传递给 do.call。
colnames <- names(data)
do.call(stats, as.list(col_names))
但我遇到一个常见错误:
Error in (function (col_names) :
unused arguments ("loans_approved_amount_limit_in_account", "loans_approved_amount_limit_in_ron")
如果我分别输入列名,该函数就可以工作。但我必须处理超过 1000 列,因此我需要使该过程自动化。
do.call
用于为函数的 单次 执行提供多个函数参数。例如,我们可以使用一个参数列表来代替 paste('c', 1:2)
,这样 do.call(paste, list('c', 1:2))
给出相同的结果。
因此,在您的情况下,do.call
与 运行ning stats(col1, col2, col3, ...)
相同。您可以很容易地看出这是行不通的,因为 stats
只接受一个参数。这就是为什么你得到的错误是关于未使用的参数。
您想要做的是 运行 您的函数 多个 次,使用一个参数。一种方法是 lapply
:
lapply(names(data), stats)
我的问题与这些enter link description here and
这是我的功能:
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="_"))}
然后,我想将每个列名作为参数传递给 do.call。
colnames <- names(data)
do.call(stats, as.list(col_names))
但我遇到一个常见错误:
Error in (function (col_names) :
unused arguments ("loans_approved_amount_limit_in_account", "loans_approved_amount_limit_in_ron")
如果我分别输入列名,该函数就可以工作。但我必须处理超过 1000 列,因此我需要使该过程自动化。
do.call
用于为函数的 单次 执行提供多个函数参数。例如,我们可以使用一个参数列表来代替 paste('c', 1:2)
,这样 do.call(paste, list('c', 1:2))
给出相同的结果。
因此,在您的情况下,do.call
与 运行ning stats(col1, col2, col3, ...)
相同。您可以很容易地看出这是行不通的,因为 stats
只接受一个参数。这就是为什么你得到的错误是关于未使用的参数。
您想要做的是 运行 您的函数 多个 次,使用一个参数。一种方法是 lapply
:
lapply(names(data), stats)