Yo estaba tratando de un pequeño código con la declaración de si, aunque es muy simple,pero hay algo que realmente me confunde aquí está el código

n<-857
while(n!=1){
if(n<=0)
 print("please input a positive integer")
else if(n%%2==0)
 n<-n/2
 print(n)
else
 n<-3*n+1
 print(n)
  }

como vemos arriba,cuando se ejecuta este código en R, de ahí viene el error,pero si puedo cambiar la instrucción if como este

if(n<=0)
     print("please input a positive integer")
    else if(n%%2==0)
     n<-n/2
    else
     n<-3*n+1

está bien ,mi pregunta es que podemos escribir sólo una línea debajo de cada juicio? si yo quiero hacer algo más después de cada juez, ¿qué debo hacer ,como en este caso, quiero cambiar el valor de n,pero también desea mostrar, ¿qué debo hacer? muchas gracias

Esto se ve como pueden ser procedentes de python, donde los espacios en blanco en la materia. Como regla general, la mayoría de los idiomas (R, C, Java, javascript) no se preocupan por espacios en blanco. Todas las tabulaciones, retornos de carro, y los espacios se puede entrar no cambiar una cosa. Que el uso de los corchetes {} código de grupo junto a los bloques. De las respuestas mencionar esto, pero no como un general de alto nivel de idea.

OriginalEl autor TOPMAD | 2013-03-23

5 Comentarios

  1. 40

    Para ser precisos, no se trata de líneas, pero sobre declaraciones. Usted puede tener toda la if else instrucción en una línea:

    > if (TRUE) 1 else 3
    [1] 1

    Una declaración final, en el final de la línea (si), se puede ver que bien en el modo interactivo si se introduce el código línea por línea:

    > if (TRUE) 
    + 1
    [1] 1
    > else
    Fehler: Unerwartete(s) 'else' in "else" # error: unexpected 'else' in "else"
    > 3
    [1] 3

    if puede venir en forma if (condition) statement o if (condition) statement else other.statement, el intérprete asume la primera versión, es decir si la instrucción está completa después de la línea 2 en el modo interactivo que sencillamente no pueden esperar si un else aparece a continuación. Esto es diferente en sourced código no está claro con la siguiente línea que se forma.

    Punto y coma final instrucciones:

    > if (TRUE) 1; else 3
    [1] 1
    Fehler: Unerwartete(s) 'else' in " else"  # error: unexpected 'else' in "else"

    Pero sólo puede tener una declaración en cada rama de la condición.

    > if (TRUE) 1; 2 else 3
    [1] 1
    Fehler: Unerwartete(s) 'else' in " 2 else" # error: unexpected 'else' in "2 else"

    Llaves grupo de declaraciones por lo que aparecen como una instrucción.

    > if (TRUE) {1; 2} else 3
    [1] 2
    gracias por su amabilidad de reproducción, voy a seguir a ver el archivo de ayuda, la habilidad en la R es tan hermoso

    OriginalEl autor cbeleites

  2. 12

    Tienes que utilizar {} que permite que el if declaración a tener más de una línea. Intente esto:

    n<-857
    while(n!=1){
      if(n<=0){
        print("please input a positive integer")
      }
    
      else if(n%%2==0){
        n<-n/2
        print(n)
      }
        else {
          n<-3*n+1
          print(n)
        }
    }
    muchas gracias
    Esto sólo funciona porque está en un while bucle. De la R la Definición de Idioma: «Cuando la declaración si no es en un bloque de la persona, si está presente, debe aparecer en la misma línea que el final de statement2. De lo contrario, la nueva línea al final de statement2 completa el si y los rendimientos de una sintaxis completa de la instrucción que se evalúa. Una solución simple es usar una instrucción compuesta envuelto en los apoyos, poniendo a la persona en la misma línea que la llave de cierre, que marca el final de la instrucción.»
    gracias por sacar de esa referencia.

    OriginalEl autor Jilber Urbina

  3. 10

    A grupo declaraciones, rodean con llaves como lo hemos hecho con la while bucle:

    if(n<=0) {
         print("please input a positive integer")
    } else if(n%%2==0) {
         n<-n/2
         print(n)
    } else {
         n<-3*n+1
         print(n)
    }

    Esto le permitirá colocar varias instrucciones en el interior de la if, el else if y el final else.

    un millón de gracias es usted muy amable chicos
    muchas gracias

    OriginalEl autor NPE

  4. 1

    mientras que la respuesta directa, como se ha señalado, el uso de llaves;

    vale la pena agregar que puede integrar el <- operador de asignación en muchas funciones.

    En su caso específico:

        print(n <- 3*n+1)
    
       ## instead of 
       #  n <- 3*n+1
       #  print(n)


    nota de que el uso de = aquí se NO trabajo. Debe ser <-

    No es un problema para este ejemplo, pero la asignación sólo se producirá si el argumento es realmente evaluados en la función. El efecto es como si la expresión es pasado a la función, en lugar del valor (como en C/C++). Ejemplo: g <- function(x) {} ; n <- 1; g(n <- 2); n
    absolutamente. Es por eso que he calificado de mi declaración indicando que funciona con muchos funciones. 🙂

    OriginalEl autor Ricardo Saporta

  5. 0

    Oído hablar alguna vez del rizado barces?

    n<-857
    while(n!=1){
        if(n<=0) {
            print("please input a positive integer")
        } else if(n%%2==0) {
            n<-n/2
            print(n)
        } else {
            n<-3*n+1
            print(n)
        }
    }
    gracias deseo que tengas un buen día
    parece que esta respuesta tiene un montón de downvotes. Me pregunto por qué es eso?
    comentario sarcástico? ninguna explicación? [Yo no downvote por la forma de la Vergüenza que la gente no deje los comentarios cuando se downvote…
    a la derecha en. Sin embargo, por el mismo ejemplo que el OP dio, s/él claramente ha oído hablar de llaves. La cuestión es la de saber cómo usarlas correctamente. Adivinar por los muchos downvotes de un aparentemente «técnicamente correcto» respuesta, parece que el snarknyness es bastante evidente.
    en realidad soy nuevo aquí , aunque yo sé algo sobre el foro, para ser honesto, yo no sabía mucho acerca de stackoverflow de la regla, en lo profundo de mi corazón , le doy las gracias a todas las personas que me ayudan con mi problema amablemente, puede ser que hay algún malentendido o error, por favor perdonar una nueva para mi posible error y la operación

    OriginalEl autor Henrik

Dejar respuesta

Please enter your comment!
Please enter your name here