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.

Eres un traductor de español que traduce documentos de IT. Traduce lo siguiente al español. Utiliza todos los elementos como argumento en la función “while”.

Tengo la siguiente función:

function1 <- function(x){
  while(grepl("^|", x, fixed = TRUE)){
    x <- gsub("\\^\\|", "|", x)
  }
  return(x)
}

Se supone que debe intercambiar ^| por |, mientras aún haya ^|.

Cuando hago lo siguiente:

x <- c("hallo^|hallo", "hallo^^|hallo")
function1(x)
[1] "hallo|hallo"  "hallo^|hallo"
Warning messages:
1: In while (grepl("^|", x, fixed = TRUE)) { :
  the condition has length > 1 and only the first element will be used
2: In while (grepl("^|", x, fixed = TRUE)) { :
  the condition has length > 1 and only the first element will be used

no reduce todos los ^| en el segundo elemento, porque el primer elemento está libre de ^| y, por lo tanto, la función while se detiene.

¿Cómo puedo iterar la función a través de todos los elementos? El resultado debería ser:

[1] "hallo|hallo"  "hallo|hallo"
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para iterar la función a través de todos los elementos, puedes utilizar la función sapply para aplicar la función a cada elemento del vector x. El código actualizado quedaría así:

    function1 <- function(x){
      for(i in 1:length(x)){
        while(grepl("\\^\\|", x[i], fixed = TRUE)){
          x[i] <- gsub("\\^\\|", "|", x[i])
        }
      }
      return(x)
    }
    
    x <- c("hallo^|hallo", "hallo^^|hallo")
    function1(x)
    

    Esto dará como resultado:

    [1] "hallo|hallo" "hallo|hallo"
    

    Ten en cuenta que he reemplazado el bucle while por un bucle for para iterar a través de cada elemento en x y utilizo x[i] para referenciar cada elemento. Además, en la función gsub, utilizo dos barras invertidas para escapar los caracteres especiales ^ y |.

Comments are closed.