我想知道是否可以在下面的函数foo
的输出中为每个矢量元素分配名称?
对于以下示例,给$pubs
名称的元素:"pubs_-1SD"
,"pubs_+1SD"
,给$time
名称的元素,"time_-1SD"
,{{1 }}?
"time_+1SD"
答案 0 :(得分:4)
您可以在sapply
中传递列名称,并使用setNames
分配名称:
foo <- function(data, vars) sapply(vars, function(x)
setNames(mean(data[[x]]) + c(-1, 1)*sd(data[[x]]),
paste0(x, '_', c('-', '+'), '1SD')), simplify = FALSE)
foo(data, c("pubs", "time"))
#$pubs
#pubs_-1SD pubs_+1SD
# 5.348203 33.909862
#$time
#time_-1SD time_+1SD
# 3.312931 12.848359
答案 1 :(得分:1)
我们可以使用Map
foo <- function(data, vars) {
Map(function(x, y) setNames(mean(x) + c(-1, 1)*sd(x),
sprintf('%s_%s1SD', rep(y, 2), c('-', '+'))), data[,vars], vars)
}
foo(data, c("pubs", "time"))
#$pubs
#pubs_-1SD pubs_+1SD
# 5.348203 33.909862
#$time
#time_-1SD time_+1SD
# 3.312931 12.848359