从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
>