我为数据提供了一些条件语句,并且在引号中得到了所需的值。我想删除此报价,但不能删除。
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)
所以,我需要帮助。预先感谢。
答案 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。
当然,cut
或findInverval
比下面的方法更好,我只是为了简单起见并继续您的方法。
其工作原理::由于每个条件都是互斥的,因此在同一实例中两件事不可能成立,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
>