将名称分配给R中列表的向量元素

时间:2020-08-19 06:10:10

标签: r character lapply

我想知道是否可以在下面的函数foo的输出中为每个矢量元素分配名称?

对于以下示例,给$pubs名称的元素:"pubs_-1SD""pubs_+1SD",给$time名称的元素,"time_-1SD",{{1 }}?

"time_+1SD"

2 个答案:

答案 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