es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Aplica la función regmatches a una lista de caracteres en R.

Tengo esta lista de caracteres almacenados en una variable llamada x:

x <- 
  c(
    "images/logos/france2.png", 
    "images/logos/cnews.png",
    "images/logos/lcp.png", 
    "images/logos/europe1.png",
    "images/logos/rmc-bfmtv.png",
    "images/logos/sudradio.png",
    "images/logos/franceinfo.png"
  )

El patrón es “images/logos/\s(.?)\s*.png”

regmatches(x, regexec(pattern, x))[[1]][2]

Deseo extraer una parte de cada cadena chr según un patrón, como hace esta función, que funciona bien pero solo para el primer elemento de la lista.

pattern <- "images/logos/\\s*(.*?)\\s*.png

y <- regmatches(x, regexec(pattern, x))[[1]][2]

Solo devuelve:

"france2"

¿Cómo puedo aplicar la función regmatches a todos los elementos de la lista para obtener un resultado como este?

[1] "france2"    "europe1"    "sudradio"  
[4] "cnews"      "rmc-bfmtv"  "franceinfo"
[7] "lcp"        "rmc"        "lcp"

FYI esta es una lista de etiquetas src que proviene de un rastreador

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar la función lapply() para aplicar la función regmatches() a cada elemento de la lista x. Aquí tienes un ejemplo de código:

    pattern <- "images/logos/\\s*(.*?)\\s*.png"
    
    y <- lapply(x, function(str) {
      regmatches(str, regexec(pattern, str))[[1]][2]
    })
    
    y
    

    Este código devolverá la siguiente salida:

    [1] "france2"    "cnews"      "lcp"        "europe1"    "rmc-bfmtv" 
    [6] "sudradio"   "franceinfo"
    

    La función lapply() aplica la función dada (en este caso una función anónima) a cada elemento de la lista x y devuelve una nueva lista con los resultados. La lista resultante y contiene las subcadenas extraídas de cada elemento en x.

Comments are closed.