#r
Вопрос:
Поэтому я создал эту функцию, которая принимает только один числовой элемент, а не вектор.
salaryCategory=function(s){ if(sgt;=40000 amp;amp; slt;70000) print("Low") if(sgt;=70000 amp;amp; slt;100000) print("Medium") if(sgt;=100000 amp;amp; slt;140000) print("High") if(slt;40000 || sgt;=140000) print("Invalid") }
Теперь я пытаюсь сохранить вывод, используя эту функцию внутри вектора.
Моя цель состоит в том, чтобы использовать цикл и использовать эту функцию для создания другого вектора с выводом из функции.
Когда я пытаюсь запустить это.
k=c(500000,75000,100000,42000) j=c() for (i in 1:length(k)) { j[i]=salaryCategory(k[i]) }
Вывод, к которому я стремлюсь, состоит в том, чтобы сохранить вывод из функции внутри «j» , поэтому я хочу, чтобы он выглядел так.
j=("invalid","Medium","High","Low")
Это не сохранение кода внутри j, и я не знаю, что я делаю не так.
Ответ №1:
Вам нужно использовать return в своей функции вместо печати
salaryCategory=function(s){ if(sgt;=40000 amp;amp; slt;70000) return("Low") if(sgt;=70000 amp;amp; slt;100000) return("Medium") if(sgt;=100000 amp;amp; slt;140000) return("High") if(slt;40000 || sgt;=140000) return("Invalid") }
Комментарии:
1. Большое спасибо, братан, я ценю это. Ответ был у меня перед глазами, и я этого не осознавал.
2. Такое случается 🙂 Учитывая, что ваша проблема решена, было бы здорово, если бы вы приняли один из ответов, который вам ближе всего подходит.
3. Спасибо! И вы довольно хорошо использовали форматирование вопроса, несмотря на то, что были новичком в сообществе. Слава!
Ответ №2:
В R
, для if/else/… заявление, формат похож
if (condition) { action }
И вносить свой вклад print
неуместно.
Следовательно, ваша функция должна быть
salaryCategory=function(s){ if(sgt;=40000 amp;amp; slt;70000){ ("Low") } else if (sgt;=70000 amp;amp; slt;100000) { ("Medium") } else if (sgt;=100000 amp;amp; slt;140000) { ("High") } else if (slt;40000 || sgt;=140000) { ("Invalid") } }
И для j
,
j=c() for (i in 1:length(k)) { j lt;- c(j, salaryCategory(k[i])) } j [1] "Invalid" "Medium" "High" "Low"
Твой способ j
тоже работает.
j=c() for (i in 1:length(k)) { j[i]=salaryCategory(k[i]) } j [1] "Invalid" "Medium" "High" "Low"
Ответ №3:
Вы можете использовать cut()
функцию и избегать вложенных операторов if.
#test data slt;-c(0, 50000, 80000, 110000, 200000) cut(s, breaks=c(-Inf, 40000, 70000, 100000, 140000, Inf), labels=c("invalid", "Low", "Medium", "High", "invalid") )
Ответ №4:
ваш код в функции salaryCategory
имеет выходное значение ответа без сохранения значения, вы должны изменить вывод на возвращаемое значение в функции salaryCategory
с кодом
salaryCategory lt;- function(x) { if(sgt;=40000 amp;amp; slt;70000) return ("Low") if(sgt;=70000 amp;amp; slt;100000) return ("Medium") if(sgt;=100000 amp;amp; slt;140000) return ("High") if(slt;40000 || sgt;=140000) return ("Invalid") }