337 votes

Concaténer un vecteur de chaînes de caractères

Si j'ai un vecteur de type caractère, comment puis-je concaténer les valeurs en une chaîne de caractères? Voici comment je le ferais avec paste() :

sdata = c('a', 'b', 'c')
paste(sdata[1], sdata[2], sdata[3], sep ='')

ce qui donne "abc".

Mais bien sûr, cela ne fonctionne que si je connais la longueur de sdata à l'avance.

5voto

C8H10N4O2 Points 9172

La réponse de Matt Turner est certainement la bonne réponse. Cependant, dans l'esprit de la réponse de Ken Williams, vous pourriez également faire :

capture.output(cat(sdata, sep=""))

2voto

AlexB Points 1952

Une autre façon serait d'utiliser le package glue :

glue_collapse(glue("{sdata}"))
paste(glue("{sdata}"), collapse = '')

1voto

fan Points 9

Voici une petite fonction utilitaire qui regroupe une liste nommée ou non nommée de valeurs dans une seule chaîne pour une impression plus facile. Il affichera également la ligne de code elle-même. Cela provient de ma page d'exemples de listes en R.

Générer des listes nommées ou non nommées :

# Define Lists
ls_num <- list(1,2,3)
ls_str <- list('1','2','3')
ls_num_str <- list(1,2,'3')

# Named Lists
ar_st_names <- c('e1','e2','e3')
ls_num_str_named <- ls_num_str
names(ls_num_str_named) <- ar_st_names

# Add Element to Named List
ls_num_str_named$e4 <- 'this is added'

Voici une fonction qui convertira une liste nommée ou non nommée en chaîne :

ffi_lst2str <- function(ls_list, st_desc, bl_print=TRUE) {

  # string desc
  if(missing(st_desc)){
    st_desc <- deparse(substitute(ls_list))
  }

  # create string
  st_string_from_list = paste0(paste0(st_desc, ':'), 
                               paste(names(ls_list), ls_list, sep="=", collapse=";" ))

  if (bl_print){
    print(st_string_from_list)
  }
}

Testez la fonction avec les listes créées précédemment :

> ffi_lst2str(ls_num)
[1] "ls_num:=1;=2;=3"
> ffi_lst2str(ls_str)
[1] "ls_str:=1;=2;=3"
> ffi_lst2str(ls_num_str)
[1] "ls_num_str:=1;=2;=3"
> ffi_lst2str(ls_num_str_named)
[1] "ls_num_str_named:e1=1;e2=2;e3=3;e4=this is added"

Test de la fonction avec un sous-ensemble d'éléments de la liste :

> ffi_lst2str(ls_num_str_named[c('e2','e3','e4')])
[1] "ls_num_str_named[c(\"e2\", \"e3\", \"e4\")]:e2=2;e3=3;e4=this is added"
> ffi_lst2str(ls_num[2:3])
[1] "ls_num[2:3]:=2;=3"
> ffi_lst2str(ls_str[2:3])
[1] "ls_str[2:3]:=2;=3"
> ffi_lst2str(ls_num_str[2:4])
[1] "ls_num_str[2:4]:=2;=3;=NULL"
> ffi_lst2str(ls_num_str_named[c('e2','e3','e4')])
[1] "ls_num_str_named[c(\"e2\", \"e3\", \"e4\")]:e2=2;e3=3;e4=this is added"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X