2010-05-02 18 views
29

Estoy tratando de producir una sola variable que es una concatenación de dos caracteres, por ejemplo, para pasar de "p30s4" "p28s4" a "p30s4 p28s4". He intentado cat y pegar como se muestra a continuación. Ambos devuelven variables vacías. ¿Qué estoy haciendo mal?R: ¿cómo puedo concatenar un vector?

> blah = c("p30s4","p28s4") 
> blah 
[1] "p30s4" "p28s4" 

> foo = cat(blah) 
p30s4 p28s4 
> foo 
NULL 

> foo = paste(cat(blah)) 
p30s4 p28s4 
> foo 
character(0) 
+0

concatenas un vector, quizás quieras cambiar la pregunta, pero la respuesta es correcta, sin embargo, – Dan

Respuesta

52

Trate de usar:

> paste(blah, collapse = "") 
[1] "p30s4p28s4" 

o si desea que el espacio entre:

> paste(blah, collapse = " ") 
[1] "p30s4 p28s4" 
10

Una alternativa al argumento de 'colapso' de la pasta(), es el uso de hacer .call() para pasar cada valor en el vector como argumento.

do.call(paste,as.list(blah)) 

La ventaja es que este enfoque se puede generalizar para funciones distintas de 'pegar'.

+0

'as.list (blah)' hizo el truco para mí –

2

Las respuestas a esta pregunta son geniales, y mucho más simples que las mías, así que desde entonces he adoptado el uso de 'colapso'.

Sin embargo, para promover la idea de que en caso de duda, puede escribir su propia función, presento mi solución anterior, menos elegante:

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) 

también puede agregar citas y comas, o casi cualquier cosa - esta es la versión original que escribí:

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 
} 
1

el problema con el uso de cat anterior es que cat(x) escribe x a la salida, no a una variable. Si quería escribir en una cadena, que podría hacer:

capture.output(cat(blah)) 

que como su nombre lo indica, captura la salida de una cadena para devolver el resultado deseado. Sin embargo, esto es no el método preferido, solo una explicación por medio de una solución alternativa.

Cuestiones relacionadas