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.

¿Cómo se llama una función que no recibe ninguna entrada dentro de una tubería?

Intenté buscar esto pero no pude encontrar ninguna pregunta similar. Digamos, por el bien de un ejemplo simple, que quiero hacer lo siguiente usando el operador de tubería %>% de dplyr.

c(1,3,5) %>% ls() %>% mean()

Dejando de lado cuál sería el caso de uso de una tubería como esta, ¿cómo puedo llamar a una función “en medio de la tubería” que no necesite ninguna entrada proveniente del lado izquierdo y simplemente las pase a la siguiente función en la tubería? Básicamente, quiero poner una “interrupción” o “pausa” en mi tubería, permitir que esa función haga su tarea y luego continuar mi camino feliz. Obviamente, lo anterior no funciona realmente, y sé que el operador de tubería T %>% tampoco será útil aquí porque aún espera que la función intermedia necesite entradas provenientes del lado izquierdo. ¿Hay opciones aquí sin asignar objetos intermedios y reiniciar la tubería?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puedes usar el punto . como marcador de posición para la entrada que proviene del lado izquierdo del operador “|>”. En tu caso específico, para llamar a una función en medio de la tubería que no necesita ninguna entrada proveniente del lado izquierdo, puedes hacer lo siguiente:

    c(1, 3, 5) %>% 
      {ls(); .} %>% 
      mean()
    

    En esta tubería, los corchetes {} se utilizan para agrupar las dos primeras funciones juntas, y el punto . se utiliza para pasar la entrada del lado izquierdo a la siguiente función en la tubería. Aquí, la función ls() se llama sin argumentos y solo sirve como una pausa o interrupción en la tubería.

    Ten en cuenta que este enfoque puede ser útil pero también potencialmente confuso, así que úsalo con cuidado y considera agregar comentarios para que el código sea más comprensible.

Comments are closed.