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

问题描述

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

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

"time_+1SD"

解决方法

您可以在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 
,

我们可以使用Map

foo <- function(data,vars) {
          
           Map(function(x,y) setNames(mean(x) + c(-1,1)*sd(x),sprintf('%s_%s1SD',rep(y,2),'+'))),data[,vars],vars)
    }
     
    
     
foo(data,"time"))
#$pubs
#pubs_-1SD pubs_+1SD 
# 5.348203 33.909862 

#$time
#time_-1SD time_+1SD 
# 3.312931 12.848359