2017-07-08 8 views
3

J'ai une liste dans R et j'essaie de renommer les membres de la liste d'un tableau de caractères. Par exemple:comment vectoriser les arguments d'une fonction dans R?

mylist <- list(c('a','b','c'),c('d','e'),'f') 
headers <- c('heading1','heading2','heading3') 

Et je peux renommer les membres de la liste comme ceci:

names(mylist) <- c(headers[1], 
        headers[2], 
        headers[3]) 

Mais quand ma liste est 100s des membres de longue, ce code est horrible à écrire. J'ai essayé d'utiliser une notation for-loop ainsi que vectorisée mais rien ne fonctionne. Toutes mes excuses pour ce qui est sans doute une question en double mais j'ai cherché beaucoup de fausses pistes en essayant de google it

+5

noms '(mylist) <- headers' –

Répondre

2

Vous pouvez utiliser la fonction de collage pour créer séquentiellement des en-têtes numérotés dans une boucle for. Utilisez ensuite la réponse ci-dessus pour affecter les en-têtes aux noms de la liste.

mylist <- list(c('a','b','c'),c('d','e'),'f') 
headers <- rep(NA, length(mylist)) 
for (i in 1:length(mylist)){ 
    headers[i] <- paste("heading", i, sep = "") 
} 
names(mylist) <- headers 
0

Avec le sprintf -fonction il est aussi facile que:

names(mylist) <- sprintf("%s%s", "heading", 1:length(mylist)) 

Le résultat:

> mylist 
$heading1 
[1] "a" "b" "c" 

$heading2 
[1] "d" "e" 

$heading3 
[1] "f"