【发布时间】:2019-10-24 05:35:46
【问题描述】:
我有一个函数,它接收一个数据框和该数据框中的一列。我想使用 lapply() 将我的函数应用于数据框中的每一列,但我不知道该怎么做。 我认为它应该看起来像:
#dataframe is called kstarter
my_func(df, col) {
...
}
lapply(kstarter, arg1=kstarter, arg2=??)
但我似乎无法让它工作。 arg2 如何引用 lapply 迭代的每一列?我感谢您的帮助!
编辑:
我想申请使用的功能是:
get_col_info <- function(col, df) {
unique_vals <- df %>%
select(col) %>%
distinct()
num_u_vals <- nrow(unique_vals)
if (is.numeric(df[[col]])) {
return(list(
min = min(df[[col]]),
max = max(df[[col]]),
mean = mean(df[[col]])
))
} else if ((!is.numeric(df[[col]])) & num_u_vals < 10) {
return(list(
n_values = num_u_vals,
unique_values = unique_vals %>% pull()
))
} else if (!is.numeric(df[[col]]) & num_u_vals >= 10) {
return(list(
n_values = num_u_vals,
sample_values = sample(df[[col]], size=10)
))
}
}
get_col_info 需要将列名和数据框作为参数。
我想创建一个列表,使用 lapply 获取数据框中每一列的 col 信息,例如list <- lapply(kstarter, get_col_info(current_col, kstarter)),但我无法弄清楚语法。请帮忙!
【问题讨论】:
-
“我有一个函数,它接收一个数据帧和该数据帧中的一列。我想使用 lapply() 将我的函数应用于数据帧中的每一列”你的问题不是很清楚,但看来你应该在你的函数中使用
lapply。将函数foo应用于data.frameDF的所有列的方法是lapply(DF, foo)。这仅在foo接受向量作为输入时才有效,因为lapply将DF中的向量(列)传递给foo。foo当然可以接受其他输入(您可以在lapply中指定),但是您迭代的 data.frame 需要在foo之外。 -
@Roland 如何指定 lapply 以使 foo 接受数据帧作为另一个输入?
-
我认为您可以简单地使用
lapply(kstarter, get_col_info, df = kstarter),但您必须将函数中的第一个块更改为unique_vals <- unique(df[[col]])。