从r中条件语句的输出中删除引号

时间:2018-06-26 05:21:38

标签: r quotes

我为数据提供了一些条件语句,并且在引号中得到了所需的值。我想删除此报价,但不能删除。

dd <- function(x){
if ( (x >= 15& x <= 19)) {print ("4")}
else if ( (x >= 20& x <= 29)) {print ("5")}
if ( (x >= 30& x <= 39)) {print ("6")}
else if ( (x >= 40& x <= 45)) {print ("7")}
if ( (x >= 46& x <= 50)) {print ("8")}
else if ( (x >= 51& x <= 55)) {print ("9")}
if ( (x >= 56& x <= 60)) {print ("10")}
else if ( (x >= 61& x <= 70)) {print ("11")}
}


>dd(55) 
[1] "9"

我希望的值为9。我希望该值不带引号,可以用这样的字母表示

> k
[1] 9 

我使用了这段代码,但失败了。

 print(dd(55), quote=FALSE)

所以,我需要帮助。预先感谢。

2 个答案:

答案 0 :(得分:2)

可以使用if/else

来代替使用多个findInterval
dd <- function(x) {
  tmp <- findInterval(x, c(15, 20, 30, 40, 46, 51, 56, 61)) + 3
  replace(tmp, tmp==11, NA)
 }

dd(55)
#[1] 9

它还可以与多个元素一起使用

dd(c(15, 36, 46, 60))
#[1]  4  6  8 10

答案 1 :(得分:2)

在您的代码中,您已经使用带数字字符值的print来接收引号。另外,您应该使用return而不是print。

当然,cutfindInverval比下面的方法更好,我只是为了简单起见并继续您的方法。

其工作原理::由于每个条件都是互斥的,因此在同一实例中两件事不可能成立,R中的TRUE值乘以(TRUE)时,其TRUE强制为1,因此为1乘以您的系数值。但是,无论情况如何,只要计算为FALSE,该值就会强制为零,再乘以您的系数便会返回零。按照这种逻辑,这应该适合您的情况。

dd <- function(x){
  return((x >= 15 & x <= 19)*4+ (x >= 20 & x <= 29)*5+ (x >= 30 & x <= 39)*6+ (x >= 40 & x <= 45)*7+ (x >= 46 & x <= 50)*8+ (x >= 51 & x <= 55)*9+ (x >= 56 & x <= 60)*10+ (x >= 61 & x <= 70)*11)
}

输出

> dd(17)
[1] 4
> dd(55)
[1] 9
>