我正在尝试为我的 lapply 声明找出正确的论点

I'm trying to figure out the right argument for my lapply statment

我有一个有两个参数的函数。列名和数据框。

get_col_mean <- function(col_name, data_frame) {
result_for_mean <- mean(life_exp[ ,col_name], na.rm = TRUE)
return(result_for_mean)
}

现在我正在制作一个列表,不包括此数据框的第一列,这里是代码:

col_means <- lapply(life_exp$col_name,get_col_mean,life_exp)

我知道问题出在我的论点中。 col_means 的主要目标是获得所有列的平均值列表,不包括作为字符串的第一列。这是数据集的示例。任何帮助,将不胜感激

我们可以直接使用 colMeans 而无需任何循环,即只需删除非数字的第一列并应用 colMeans

colMeans(life_exp[-1], na.rm = TRUE)

或使用dplyr

library(dplyr)
life_exp %>%
     summarise(across(where(is.numeric), mean, na.rm = TRUE))

根据 OP 的代码,我们需要将列名作为参数进行循环而不是 life_exp$col_name(不清楚 OP 是否创建了列名列)。如果我们不使用 anonymous/lambda 调用,则指定函数的参数以确保 'life_exp' 是数据集

lapply(names(life_exp)[-1], get_col_mean, data_frame = life_exp)

或者使用 lambda 函数

lapply(names(life_exp)[-1], function(nm) get_col_mean(nm, life_exp))

注意:lapply 的输出始终是 list。函数 returns 每列的数字 mean 值。所以,如果我们需要 meanvector,那么要么 unlist lapply 输出,要么直接使用 sapply

sapply(names(life_exp)[-1], get_col_mean, data_frame = life_exp)

此外,这可以自动进行,即如果我们不知道哪些是数字列,则先创建一个索引

i1 <- sapply(life_exp, is.numeric)
sapply(names(life_exp)[i1], get_col_mean, data_frame = life_exp)