J'essaie de produire une seule variable qui est une concaténation de deux caractères, par exemple pour passer de "p30s4" "p28s4" à "p30s4 p28s4". J'ai essayé le chat et le collage comme indiqué ci-dessous. Les deux renvoient des variables vides. Qu'est-ce que je fais mal?
> blah = c("p30s4","p28s4")
> blah
[1] "p30s4" "p28s4"
> foo = cat(blah)
p30s4 p28s4
> foo
NULL
> foo = paste(cat(blah))
p30s4 p28s4
> foo
character(0)
Essayez d'utiliser:
> paste(blah, collapse = "")
[1] "p30s4p28s4"
ou si vous voulez l'espace entre les deux:
> paste(blah, collapse = " ")
[1] "p30s4 p28s4"
Une alternative à l'argument 'collapse' de paste (), est d'utiliser do.call () pour passer chaque valeur du vecteur comme argument.
do.call(paste,as.list(blah))
L'avantage est que cette approche est généralisable à des fonctions autres que "coller".
Les réponses à cette question sont excellentes et beaucoup plus simples que les miennes - j'ai donc depuis adopté l'utilisation de "l'effondrement".
Cependant, pour promouvoir l'idée qu'en cas de doute, vous pouvez écrire votre propre fonction, je présente ma précédente solution, moins élégante:
vecpaste <- function (x) {
y <- x[1]
if (length(x) > 1) {
for (i in 2:length(x)) {
history
y <- paste(y, x[i], sep = "")
}
}
#y <- paste(y, "'", sep = "")
y
}
vecpaste(blah)
vous pouvez également ajouter des guillemets et des virgules, ou à peu près n'importe quoi - c'est la version originale que j'ai écrite:
vecpaste <- function (x) {
y <- paste("'", x[1], sep = "")
if (length(x) > 1) {
for (i in 2:length(x)) {
history
y <- paste(y, x[i], sep = "")
}
}
y <- paste(y, "'", sep = "")
y
}
Le problème avec votre utilisation de cat
ci-dessus est que cat(x)
écrit x
en sortie, pas dans une variable. Si vous vouliez écrire dans une chaîne, vous pourriez faire:
capture.output(cat(blah))
qui, comme son nom l'indique, capture la sortie dans une chaîne pour retourner le résultat souhaité. Cependant, c'est pas la méthode préférée, juste une explication au moyen d'une solution alternative.