我正在尝试为我的 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
值。所以,如果我们需要 mean
的 vector
,那么要么 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)
我有一个有两个参数的函数。列名和数据框。
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
值。所以,如果我们需要 mean
的 vector
,那么要么 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)