【问题标题】:How to save character output in loop?如何在循环中保存字符输出?
【发布时间】:2021-11-03 02:13:17
【问题描述】:

所以我做了这个函数,它只需要一个数字元素,而不是向量。

salaryCategory=function(s){
  if(s>=40000 && s<70000)
    print("Low")
  if(s>=70000 && s<100000)
    print("Medium")
  if(s>=100000 && s<140000)
    print("High")
  if(s<40000 || s>=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 中,我不知道我在做什么错。

【问题讨论】:

    标签: r


    【解决方案1】:

    您需要在函数中使用 return 而不是打印

    salaryCategory=function(s){
      if(s>=40000 && s<70000)
        return("Low")
      if(s>=70000 && s<100000)
        return("Medium")
      if(s>=100000 && s<140000)
        return("High")
      if(s<40000 || s>=140000)
        return("Invalid")
    }
    

    【讨论】:

    • 非常感谢兄弟,我很感激。答案就在我面前,我没有意识到。
    • 发生了 :) 鉴于您的问题已解决,如果您接受与您最接近的答案之一,那就太好了。
    • 谢谢!尽管您是社区新手,但您还是很好地使用了问题格式。赞一个!
    【解决方案2】:

    R中,对于if/else/...语句,格式如下

    if (condition) {
      action
    }
    

    并且给出一个输入,print 是不合适的。

    因此,你的函数应该是

    salaryCategory=function(s){
      if(s>=40000 && s<70000){
        ("Low")
      } else if
      (s>=70000 && s<100000) {
        ("Medium")
      } else if (s>=100000 && s<140000) {
        ("High")
      } else if (s<40000 || s>=140000) {
        ("Invalid")
      }
        
    }
    

    对于j,

    j=c()
    for (i  in 1:length(k)) {
      j <- 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
       s<-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 <- function(x) {
        if(s>=40000 && s<70000)
            return ("Low")
          if(s>=70000 && s<100000)
            return ("Medium")
          if(s>=100000 && s<140000)
            return ("High")
          if(s<40000 || s>=140000)
            return ("Invalid")
        }
        

        【讨论】:

          猜你喜欢
          • 2012-03-30
          • 2019-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-29
          • 2020-05-30
          • 2019-10-24
          相关资源
          最近更新 更多