【问题标题】:Why return null in while loop R [duplicate]为什么在while循环R中返回null [重复]
【发布时间】:2020-10-05 03:21:23
【问题描述】:

如果结果满足 if 语句,我想将结果存储在向量中,但返回值始终为空。如何让它返回循环的值?

url <- "http://stat.ethz.ch/Teaching/Datasets/WBL/legierung.dat" 
data <- read.table(url, header = TRUE)
breaking = data[,4]
c = mean(breaking)
b  = 1
p = data
oo <- c()
var = function(){
  if(a > c){
    oo<-c(oo,"High")
  }else{
    oo = c(oo,"Low")
  }
  return(oo)
} 

count = 0
while(count <=length(p[,4])){
  a = p[(b),4]
  b = b+1
  var()
  count = count+1 
}

【问题讨论】:

    标签: r


    【解决方案1】:

    你这样做的方式非常复杂。

    据我所知,我认为您希望 'High' 的值大于 Breaking 列的平均值,否则为 'Low'。您可以使用ifelse 语句来做到这一点。

    mean_breaking <- mean(p$breaking)
    p$new_col <- ifelse(p$breaking > mean_breaking, 'High', 'Low')
    

    没有ifelse 也可以这样做:

    p$new_col <- c('Low', 'High')[(p$breaking > c) + 1]
    

    【讨论】:

      【解决方案2】:

      要将值添加到 oo,您需要在循环中将 var() 分配给 oo

      例子:

      while(count <=length(p[,4])){
          a = p[(b),4]
          b = b+1
          oo <- var()
          count = count+1 
      }
      

      或者在你的函数中做这个赋值而不是返回值

      例子:

      var = function(){
        if(a > c){
          oo<-c(oo,"High")
        }else{
          oo = c(oo,"Low")
        }
        oo <<- oo
      } 
      

      这是因为 &lt;&lt;- 在父环境中将 oo 分配为 oo。

      【讨论】:

      • 你的方法有效。是不是因为我没有分配一个变量来接收返回值导致我无法获取返回值?
      • 是的!您已将 null 分配给 oo,然后当您的函数被调用时,它会评估它并返回该值,但它没有将其保存在任何地方。
      猜你喜欢
      • 2016-11-30
      • 1970-01-01
      • 2015-10-26
      • 2012-10-01
      • 2011-02-07
      • 1970-01-01
      • 2021-05-26
      • 2019-05-08
      • 2017-01-11
      相关资源
      最近更新 更多