2016-09-25 3 views
0

У меня есть файл p-значений моего анализа. Я хочу использовать оператор if else, чтобы сделать следующее:инструкция if-else в R

, если значение p меньше 0,01, дает зеленый цвет. если p-значение больше 0,01 и меньше 0,05, то красный цвет. если p-значение больше 0,05, дает желтый цвет.

Я пытался использовать следующий код, но не работает:

col=ifelse(data < 0.01,"green" , 
      ifelse(data > 0.01 & data < 0.05, "red"), 
        ifelse(data>0.05, "yellow"))). 
+0

Что вы имеете в виду под «не работает». Дайте сообщения об ошибках точно так, как они появляются. Вы должны предоставить [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) с вашим вопросом. Для функции 'ifelse()' требуется как часть 'if', так и' else'. Похож на то, что ваша «желтая» часть отсутствует «else» – MrFlick

+0

Кроме того, похоже, что «красная» часть закрывается неправильно. –

+2

ifelse - это векторизованная функция, не предназначенная для такого рода вложенности, если иначе. Просто используйте регулярные if, else if, else if и т. Д., Так как у вас нет необходимости в векторизации. – dracodoc

ответ

-1
col=ifelse(data < 0.01,"green" , 
      ifelse(data > 0.01 && data < 0.05, "red"), 
        ifelse(data>0.05, "yellow"))). 

/** Там некоторые вещи здесь, что это просто основы: это намного проще для вас, чтобы создать метод (не нужно быть именем, которое я установил), который выполняет эту работу.

you should use the else's and if's as following: 

if(condition){command} 
else if (another condition){command} 
else{command that runs if no conditions are triggered} 


notice that you can use as many else if() as needed as long as you finish using else and only else */ 


public void changeColor(){ 
if(data<0.01) 
col = "green" 
else if(data>0.01 && data <0.05) 
col= "red" 
else{col="yellow"} 

}

я надеюсь, что это был какой-то помощи, я тоже только начинающий.

+1

Это вопрос R –

+0

Привет, Rutzen, я запускаю вашу функцию, и она работает, но она не дала никаких результатов. –

+0

Это потому, что я дал вам только метод, вам нужно адаптировать его к вашему классу. – Rutzen

3

В этом случае ifelse является плохим решением проблемы. Похоже, вы пытаетесь взять набор непрерывных значений (значения p) и создать для них дискретные метки. R-база cut предназначена для этой цели. Предположим, что мы имеем:

example.data <- data.frame(p = c(0.0001, 0.001, 0.01, 0.025, 0.5)) 

     p 
1 0.0001 
2 0.0010 
3 0.0100 
4 0.0250 
5 0.5000 

Мы можем просто использовать cut для создания маркировки вы хотите:

example.data$color <- cut(example.data$p, breaks = c(0, 0.01, 0.05, 1), labels = c('green', 'red', 'yellow')) 

     p color 
1 0.0001 green 
2 0.0010 green 
3 0.0100 green 
4 0.0250 red 
5 0.5000 yellow 
Смежные вопросы