r - 语言R : Variable doesn't change inside a 'for()' cycle?

标签 r variables error-handling

我正在尝试分析“edoActual”的值,但是在for循环后它似乎没有改变其值。

在RGui中运行它时,它不会指出任何错误或警告。在RStudio上运行时,它会发疯。无论哪种方式,它都不起作用。

edoActual = "q0";
print("Input cadena: ");
cadena <- scan("", what="char");

for(i in 1:length(cadena)) {
  if( edoActual == "q0" && cadena[i] == "a" ) {
    edoActual = "q1";
  }
  if( edoActual == "q0" && cadena[i] == "b" ) { 
    edoActual = "q0";
  }
  if( edoActual == "q1" && cadena[i] == "a" ) {
    edoActual = "q0";
  }
  if( edoActual == "q1" && cadena[i] == "b" ) {
    edoActual = "q1";
  }
  if( cadena[i] != "a" && cadena[i] != "b") {
    print("Error: invalid.");
    break;
  }  
}

if( i == length(cadena) ) {
  if(edoActual == "q1") {print("accepted (:");}
  if(edoActual == "q0") {print("rejected ):");}
}

应该发生什么:
[1] "Input cadena: "
1: a
2: a
3: b
4: a
5:
Read 4 ítems

[1] "accepted (:" 

最佳答案

该变量实际上变化太大,因为您在每次迭代中都测试所有if语句。

因此,每次cadena [i] =='a'时,第一个if将edqActual分配给qo,然后当它到达第3个时再次分配给q0。

我认为您真正想要的只是测试第一个有效的if语句。因此,当edoActual更改其值时,它将继续进行下一个迭代。您可以使用else进行此操作,这保证只有在前一个测试为False时,您才通过下一个测试。

edoActual = "q0";
print("Input cadena: ");
cadena <- scan("", what="char");

for(i in 1:length(cadena)) {
  if( edoActual == "q0" && cadena[i] == "a" ) {
    edoActual = "q1";
  } else if( edoActual == "q0" && cadena[i] == "b" ) { 
    edoActual = "q0";
  } else  if( edoActual == "q1" && cadena[i] == "a" ) {
    edoActual = "q0";
  } else  if( edoActual == "q1" && cadena[i] == "b" ) {
    edoActual = "q1";
  } else if( cadena[i] != "a" && cadena[i] != "b") {
    print("Error: invalid.");
    break;
  }  
}

if( i == length(cadena) ) {
  if(edoActual == "q1") {print("accepted (:");}
  if(edoActual == "q0") {print("rejected ):");}
}

关于r - 语言R : Variable doesn't change inside a 'for()' cycle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249626/

相关文章:

r - 从列表列表到长格式的 tibble

r - 是否有更快的方法来合并数据帧并循环组合?

c - 在 if 语句中声明变量 (ANSI C)

c++ - 是否可以从 C printf() 捕获错误?

r - 在没有标签的约束排序中绘制向量

RStudio 找不到用于绘图的字体

mysql、@variable 和 if 语句

javascript - 将 ruby​​ 变量从 Controller 分配给 javascript 变量

javascript - ReactJS |从 match.params 检查用户是否存在

php - 显示带有异常消息的变量值