【问题标题】:What do these expressions using logical operators inside while-loop mean?这些在while循环中使用逻辑运算符的表达式是什么意思?
【发布时间】:2019-03-04 01:52:25
【问题描述】:

我正在尝试理解 R while 循环中的一段代码,如果有人可以帮助我,我将不胜感激。我在许多在线论坛(和谷歌搜索)中阅读了 R 逻辑运算符的解释,但无法理解以下代码。

假设:

c=1

while(c<=4){

  c1=c-(c>2)*2    
  c2=1*(c<3)+2*(c>2)        

  AB=A[[c1]] * ((1-x)+x*B[[c2]])               
  c=c+1
}

我只想了解以下内容。

c1=c-(c>2)*2     

c2=1*(c<3)+2*(c>2)

我以前从未见过这种逻辑运算符的组合,如果有人能解释一下,我将不胜感激。非常感谢。

【问题讨论】:

  • 请使用“代码格式化”;它使问题更具可读性。
  • c1=c-(c&gt;2)*2 for instance 与数学中的含义相同。
  • c &gt; 2 将产生一个逻辑,当逻辑与像 * 这样的算术运算符结合使用时,它将被转换为适当的数字类型,所以实际上你得到了 @987654326 @ 或 0 * 2 在第一行
  • 首先,除了您自己之外,任何人都无法重现您的代码(例如,AB 未在任何地方定义)。更一般地说:您是否尝试过逐步运行代码?您应该添加print 语句以查看每个变量在while 循环的每一步都在做什么。
  • 另外,c=1; while(c&lt;=4) { ...; c=c+1 } 只是表达for (c in 1:4) { ... } 的一种严重混淆的方式

标签: r while-loop logical-operators


【解决方案1】:

了解特定代码行或函数的作用的另一个通常明智的步骤是绘制它;因为你的while循环只是增加c每一步然后根据这些c值计算c1c2,我们可以写两个函数

func_c1 <- function(c) c - (c > 2) * 2
func_c2 <- function(c) 1 * (c < 3) + 2 * (c > 2)

对于不同的值c,分别返回c1c2

然后我们可以绘制c1c2 的不同值c;你的while 循环认为c = 1:4

data.frame(c = 1:4, c1 = func_c1(1:4), c2 = func_c2(1:4)) %>%
    gather(param, val, -c) %>%
    ggplot(aes(c, val, colour = param)) +
    geom_point() +
    geom_line()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2013-02-18
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多