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

从r中条件句的输出中删除引号,r,quotes,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 <= 4

我的数据有几个条件语句,我在一个引号内得到了所需的值。我想删除此报价,但我不能

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"
我使用了这个代码,但失败了

 print(dd(55), quote=FALSE)

所以,我需要帮助。提前感谢。

可以使用
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

在您的代码中,您使用了带有数字字符值的print,因此您收到了引号。你也应该使用退货而不是打印

当然,
cut
findInverval
是比下面更好的选择,我只是为了简单起见,继续你的方法

它是如何工作的:因为每个条件都是互斥的,所以在同一个实例中,两件事不可能是真的,R中的真值乘以它(真)强制为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)
}

我认为您需要在函数内部
cut
findInterval
cut(x,breaks=c(15,20,30,40,46,51,56,61,Inf))
而不是
print
,创建不带引号的对象并返回
k您因为使用引号而获得引号。使用
print(9)
而不是
print(“9”)
非常感谢@akrun和@Rohit@PKumar,非常感谢。我想要的正是这个,但我不能。@Rokib,请不要交换答案,你可以自由选择,这是你的选择。但我还是要说阿克伦的答案比我的好得多。不管怎样,谢谢。我为我的无知感到抱歉。你的两个答案都非常好。我很高兴看到两个答案,我点击了两个答案的接受按钮。我想这两个都会被接受。但后来我注意到只有一个答案被接受。不管怎样,再次感谢你们两位的回答。
dd(c(15, 36, 46, 60))
#[1]  4  6  8 10
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
>