切换功能

时间:2016-05-11 15:03:33

标签: r switch-statement return

我需要检查数据帧的值范围,数据帧中的每个向量都有不同的范围。需要检查的数据帧每次都可能不同。 我拥有的所有功能都是c("temp","y","d","p")。我想检查每个向量的值是否在该范围内,否则填写NA

temp_range = c(0,140)
y_range   = c(0,100)
d_range = c(-80,100)
p_range = c(0.00,99.9)

check_range <- function(x, range){
  x[which(x<range[1] | x>range[2])] = NA
  return(x)
}

check_all_range <- function(pp, features){
  for( ff in features){
    z<- switch(ff,"temp"   =  check_range(pp$temp,temp_range),
                  "y"    =  check_range(pp$r, y_range),
                  "d" =  check_range(pp$d, d_range),
                  "p"= check_range(pp$p, p_range),           
    )
    print(f)
    return(z)
  }  
 }

现在我有一个数据框

x=data.frame(c(200,30,20,-10,-140), c(-10,20,100,10, NA))
   names(x)=c("temp","y").  
   features = c("temp","y") 

以某种方式使用check_all_range(x,features)时,只检查第一个功能tempx仍未更改。 我想也许我不太了解转换。

1 个答案:

答案 0 :(得分:0)

看起来你正在覆盖循环的每次迭代。

如果你用pp预填充z然后你只指定z [ff]作为检查值它应该工作

check_all_range的新代码

check_all_range <- function(pp, features){
  z <- pp
  for( ff in features){
    z[ff] <- switch(ff, 
                "temp" =  check_range(pp$temp,temp_range),
                "y"    =  check_range(pp$y, y_range),
                "d"    =  check_range(pp$d, d_range),
                "p"    =  check_range(pp$p, p_range),           
    )
    print(ff)
  }  
  return(z)
}