Attribuer des noms aux éléments vectoriels d'une liste dans R
Aug 19 2020
Je me demandais si nous pourrions attribuer des noms à chaque élément vectoriel dans la sortie de la fonction foo
ci-dessous?
Pour l'exemple ci - dessous, en donnant des éléments de $pubs
noms: "pubs_-1SD"
, "pubs_+1SD"
et pour les éléments de $time
noms: "time_-1SD"
, "time_+1SD"
?
data <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/salary.csv')
foo <- function(data, vars) lapply(data[,vars], function(x) mean(x) + c(-1, 1)*sd(x))
foo(data, c("pubs", "time")) # EXAMPLE OF USE
# $pubs # [1] 5.348203 33.909862 ## `"pubs_-1SD"` and `"pubs_+1SD" # $time
# [1] 3.312931 12.848359 ## `"time_-1SD"` and `"time_+1SD"`
Réponses
4 RonakShah Aug 19 2020 at 06:15
Vous pouvez passer les noms de colonne sapply
et attribuer des noms en utilisant 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 akrun Aug 19 2020 at 21:53
Nous pourrions utiliser 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