Как сохранить вывод символов в цикле?

#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") }