циклы for и оператор if-else при присвоении или округлении значений переменной в R

#r #for-loop #if-statement

#r #цикл for #оператор if

Вопрос:

Пытаюсь выяснить, как я могу написать код на R, используя операторы for-loops и if-else. В основном мне были предоставлены следующие переменные:

 > x = c(6, 1, 5, 10, 3, 0, 3, 7, 1, 6, 1, 4)

> y = NA
  

Код должен округлять, или то, что я думаю, на самом деле присваивает любое число от 5 или больше 10 и любое число от 5 до 0.
Таким образом, результатом в основном должна быть переменная y, равная набору значений 0 и 10.

Я попробовал несколько кодов, но безуспешно:

 >for (y in 1:12) {y = x 

>if (x > 5){printText = paste('10'[y])} 

>else if (x < 5){printText = paste('0'[y])}
}
  

Пожалуйста, помогите

Комментарии:

1. Что произойдет, если x == 5 ?

2. Извините, я забыл упомянуть, что если число равно 5 или больше, то его следует округлить до 10.

Ответ №1:

Согласно вашему заявлению, у вас есть два варианта: x >= 5 и x <5. Вы сказали, что все, что равно 5 и выше, должно равняться 10, а все, что ниже 5, должно равняться 0. Итак, следующий цикл for с операторами conditionals (if) будет работать.

Приветствия,

 x = c(6, 1, 5, 10, 3, 0, 3, 7, 1, 6, 1, 4)

y = c()

for(i in 1:length(x)){
  if(x[i] >= 5){
    y[i] = 10
  }else if(x[i] < 5){
    y[i] = 0
  }
}

#y = 10  0 10 10  0  0  0 10  0 10  0  0
  

Комментарии:

1. Спасибо, я полагаю, это то, что я ищу.

2. Рад помочь. Надеюсь, вы найдете логику понятной и хорошее введение в решение подобных задач. Хотя использование integer и умножение на 10 будет работать и быстрее, понимание циклов for, вероятно, будет очень полезно в будущем.

Ответ №2:

Здесь циклы не нужны:

 y <- as.integer(x >= 5)

# [1] 1 0 1 1 0 0 0 1 0 1 0 0
  

Комментарии:

1. Понятно, но есть ли способ использовать for-loops для обхода каждого элемента x?

2. @stpnchk3plswчто бы вы хотели использовать в цикле? Если в проблеме, которую вы пытаетесь решить, есть какой-то другой аспект, который, по вашему мнению, нельзя решить таким образом, вы можете захотеть предоставить более подробную информацию в своем вопросе.

3. Извините, возможно, я был неясен в своем объяснении. Я попытался изложить это так, как, как мне казалось, я это понял. Однако спасибо за вашу помощь. Я думаю, что код J.Snake — это то, что я ищу.

Ответ №3:

Что-то вроде этого должно это сделать:

 y <- as.integer(x > 5)*10
  
 # [1] 10  0  0 10  0  0  0 10  0 10  0  0
  

Ваш код выводится в виде символа. Нет необходимости делать это только для печати, но если вам нужен результат в виде символа по какой-либо другой причине, вы можете просто сделать as.character(y) в конце.

Ответ №4:

вы можете сделать это легко с помощью инструкции ifelse

 x = c(6, 1, 5, 10, 3, 0, 3, 7, 1, 6, 1, 4)

y =ifelse(x>=5,10,0)