在R语言中根据所用函数命名列表元素
解决方法
问题出在你用c()存储函数时,R会生成一个无名称的函数向量,导致sapply无法识别原函数名,deparse(substitute(fun))只能拿到循环占位符X[[i]]。以下两种方法可以解决:
方法一:使用命名列表存储函数(推荐)
直接用命名列表保存函数,sapply会自动保留列表的名称作为结果的元素名:
# 用命名列表替代c(),给每个函数指定对应名称 funs <- list(mean = mean, median = median, min = min, max = max, quantile = quantile) some_vals <- rnorm(14) # 直接调用sapply,结果自动带函数名 stats <- sapply(funs, function(fun) fun(some_vals))
方法二:给函数向量手动添加名称
如果坚持用c()存储函数,可以手动为向量添加名称属性:
funs <- c(mean, median, min, max, quantile) # 手动为函数向量设置名称 names(funs) <- c("mean", "median", "min", "max", "quantile") some_vals <- rnorm(14) stats <- sapply(funs, function(fun) fun(some_vals))
两种方法最终输出的stats都会以对应函数名作为元素名称,比如mean、median等,解决你遇到的命名问题。
内容的提问来源于stack exchange,提问作者Corbjn
相关产品推荐
相关产品推荐

