2012-02-26 74 views
19

Estoy tratando de eliminar un paréntesis de una cadena de R y ejecutar en el siguiente error:quitar el paréntesis de la cadena de

string <- "log(M)" 
gsub("log", "", string) # Works just fine 
gsub("log(", "", string) #breaks 
# Error in gsub("log(", "", test) : 
# invalid regular expression 'log(', reason 'Missing ')'' 

Respuesta

43

Escapar el paréntesis con una doble barra invertida:

gsub("log\\(", "", string) 

(Obligatorio: http://xkcd.com/234/)

12

La respuesta de Ben le da la buena manera generalmente aplicable de hacer esto.

Por otra parte, en su situación podría utilizar el argumento fixed=TRUE, así:

gsub("log(", "", string, fixed=TRUE) 
# [1] "M)" 

Es apropiada siempre que el argumento pattern-gsub() es una cadena de caracteres que contiene la secuencia literal de caracteres que está buscando. Entonces, es bueno porque te permite escribir el patrón exacto que estás buscando, sin escapes, etc.

+1

debería ser 'fixed =" TRUE "' or 'fixed = TRUE' ??? –

+1

@BenBolker - Impar Debe ser 'fixed = TRUE', pero' fixed = "TRUE" ',' fixed = "true" ', y' fixed = "True" 'también funcionan. Otros combos como 'fixed =" TRue "' or 'fixed =" TruE "' no. Relacionado (?) Recientemente me di cuenta de que 'rnorm (" 9 ")' (por ejemplo) funciona, cuando yo diría que no. (FWIW, 'rnorm (" 9 "," 1 ")' * does not * work.) Me pregunto si estos casos tienen algo que ver con la forma en que el C-code subyacente procesa los argumentos que se le pasan. ¿Qué piensas? –

+1

Interesante. La respuesta está en '? As.logical':' 'as.logical 'intenta forzar su argumento para que sea del tipo lógico . Para 'factor's, esto usa los' niveles '(etiquetas). Al igual que 'as.vector' quita los atributos, incluidos los nombres. Carácter cadenas 'c ("T", "TRUE", "True", "true")' se consideran verdaderas, 'c ("F", "FALSE", "False", "false")' como falso, y todos los demás como 'NA'. –

Cuestiones relacionadas