R语言中使用lapply()处理拆分数据框时找不到变量的问题
问题原因与解决方法
原因
你用lapply(NS.split, mean, LASSI_1)的时候,mean函数无法识别LASSI_1是每个数据框里的列——R会默认在全局环境中查找名为LASSI_1的变量,而不是从每个子数据框里提取对应列,这就导致了"变量不存在"的报错,最终返回全NA结果。
而你单独计算时(比如mean(NS.split[[1]]$LASSI_1)),是明确指定了从某个子数据框里提取LASSI_1列,所以能正常运行。
解决方法
给你几种可行的写法:
匿名函数提取列:最直观的方式,明确指定从每个子数据框中取
LASSI_1列再算均值lapply(NS.split, function(df) mean(df$LASSI_1, na.rm = TRUE))注:
na.rm = TRUE是用来忽略NA值的,如果你的数据里没有NA可以去掉。用
with简化代码:在匿名函数里用with让R在子数据框的环境中查找变量lapply(NS.split, function(df) with(df, mean(LASSI_1, na.rm = TRUE)))用
purrr包的map_dbl(可选):如果习惯tidyverse风格,这个写法更简洁,还能直接返回数值向量library(purrr) map_dbl(NS.split, ~mean(.x$LASSI_1, na.rm = TRUE))
内容的提问来源于stack exchange,提问作者Steve Scher
相关产品推荐
相关产品推荐

