2014-05-03 2 views
1

У меня есть основные строки кода я написал и успешно выполнил:Включите основную строку кода в функцию в R

if((new.weather.2013) > cut.point.90 | (new.weather.2013) < cut.point.015) {print("Weather is extreme")} else {print("Weather is not extreme")} 

Я хотел бы, чтобы превратить это в повторяемой функции. Я до сих пор довольно новичок в R, и мне трудно работать. Вот что я пробовал до сих пор (это не сработало):

weather.test <- function(test.weather) 
{ 
    if((test.weather) > cut.point.90 | 
     (test.weather) < cut.point.015) 
return{print ("Weather is extreme")} else 
return{print ("Weather is not extreme")} 
} 

Может ли кто-нибудь указать мне в правильном направлении?

EDIT: чтобы уточнить, я беру числовое значение, пропуская его через функцию, чтобы определить, является ли значение экстремальным выбросом (т. Е. Выходит за пределы разрезов). Если он выходит за пределы этих точек, он считается экстремальным, и я хочу вернуть это утверждение. Если он не выходит за пределы этого экстремального диапазона, это считается нормальным, и я хочу вернуть «погода не экстремальная». Если вы видите вышеприведенное утверждение, это делает то же самое, что я пытаюсь сделать здесь; Я просто хочу сделать его повторяемой функцией.

+0

пожалуйста, опишите, что «что не работает» означает, точно. Вы хотите, чтобы значение возвращалось из функции, или вы хотите, чтобы оно печатало значение, или и то, и другое? –

+0

'return' использует круглые скобки, а не фигурные скобки. Кстати, много раз использование 'return' является необходимым и значимым; хотя использовать его здесь некорректно, также нет необходимости явно использовать его. Ответы ниже показывают хорошие альтернативы. – r2evans

ответ

2

Я думаю, что вы хотите

weather.test <- function(test.weather) { 
    ifelse((test.weather > cut.point.90 | 
     test.weather < cut.point.015), 
     "Weather is extreme", 
     "Weather is not extreme") 
} 

#test 
cut.point.90 = .9 
cut.point.015 = .015 
weather.test(c(0,.5,1)) 

IfElse() является Векторизованной формой стандарта, если оператор, который может работать на векторах

+0

Это естественно векторизованное (хорошее!), Так что если 'test.weather' является вектором температур, то это вернет вектор строк. Если производительность всегда является проблемой ('ifelse' выполняет относительно плохо по сравнению с альтернативами), вы можете рассмотреть подмножество с чем-то вроде:' function (test.weather) {ret <- character (length (temp.weather)); idx <- ((test.weather> cut.point.90) | (test.weather r2evans

+0

Спасибо, это получилось! – thebonafortuna

+0

Я не нашел утверждение, что 'ifelse' плохо работает, чтобы быть правильным. Он часто равен производительности булевых математических методов. Это, конечно, случай, когда циклы с 'if() {} else {}' конструкциями часто бывают очень медленными. –

Смежные вопросы