Что означают эти выражения, использующие логические операторы внутри цикла while? - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь понять фрагмент кода в цикле R и буду благодарен, если кто-нибудь сможет мне помочь.Я прочитал объяснение логических операторов R на многих онлайн-форумах (и в поиске Google), но не смог понять приведенный ниже код.

Предположим:

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)

Я не встречал такого рода комбинации логических операторов раньше и был бы благодарен, если бы кто-нибудь немного это объяснил.Большое спасибо.

1 Ответ

0 голосов
/ 04 марта 2019

Другой, часто разумный шаг к пониманию того, что делает конкретная строка кода или функция, - это отобразить ее на графике;поскольку ваш цикл while просто увеличивает c каждый шаг, а затем вычисляет c1 и c2 на основе этих c значений, мы можем написать две функции

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

, которые возвращают c1и c2 соответственно для разных значений c.

Затем мы можем построить c1 и c2 для разных значений 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()

enter image description here

...