从 r 中条件句的输出中删除引号
remove quote from output of conditional sentence in r
我的数据有几个条件语句,我在报价中得到了所需的值。我想删除这句话,但我不能。
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)
所以,我需要帮助。提前致谢。
而不是使用多个 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
在您的代码中,您使用了带有数字字符值的打印,因此您收到了引号。你也应该使用 return 而不是 print.
当然 cut
或 findInverval
是比下面更好的选择,我只是为了简单起见并继续您的方法。
它是如何工作的:由于每个条件都是互斥的,所以两个事情不可能在同一个实例中为真,R 中的 TRUE 值与它相乘时(TRUE)强制到 1,因此 1 乘以你的系数值。但是,只要情况不满足,该值就会计算为 FALSE,强制为零,乘以您的系数 returns 为零。按照这个逻辑,这应该适用于您的情况。
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
>
我的数据有几个条件语句,我在报价中得到了所需的值。我想删除这句话,但我不能。
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)
所以,我需要帮助。提前致谢。
而不是使用多个 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
在您的代码中,您使用了带有数字字符值的打印,因此您收到了引号。你也应该使用 return 而不是 print.
当然 cut
或 findInverval
是比下面更好的选择,我只是为了简单起见并继续您的方法。
它是如何工作的:由于每个条件都是互斥的,所以两个事情不可能在同一个实例中为真,R 中的 TRUE 值与它相乘时(TRUE)强制到 1,因此 1 乘以你的系数值。但是,只要情况不满足,该值就会计算为 FALSE,强制为零,乘以您的系数 returns 为零。按照这个逻辑,这应该适用于您的情况。
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
>