x是整数范围在1到100如何通过使用向量索引正确地避免if-expressions?
之间我创建确定在哪个类别的数是一个函数的向量:
x∈[1,20]: small
x∈[21,50]: med
x∈[51, 100]:large
在这里,函数:
x <- c(1:99)
vector.fun<-function(x){
x[x >= 1 & x <=20] <-"small"
x[x >= 21 & x <=50] <-"med"
x[x >=51 & x <=99] <-"large"
return(x)
}
vector.fun(89)
然而如你可以看到,在函数中,我的矢量是1:99而不是1:100,由于某种原因,当我将其更改为:
x <- c(1:100)
vector.fun<-function(x){
x[x >= 1 & x <=20] <-"small"
x[x >= 21 & x <=50] <-"med"
x[x >=51 & x <=100] <-"large"
return(x)
}
vector.fun(100)
它不会识别最后一行中的任何数字:x[x >=51 & x <=100] <-"large"
并且当它发生时,它会返回“med”而不是“large”,因为它应该是。
我做错了什么?我应该在我的函数中做哪些修改,以便将100包含在参数中并返回“大”?
强制是一个可能的罪魁祸首 – Khashaa
您的函数参数与您的原始向量相同。函数外部的矢量从不使用。 – Psidom
第一次用'small'替换'x'中的索引,'x'被强制为“character”,并且以'c(“1”,“50”,“60”)> =“ 51“'和'c(”1“,”50“,”60“)<=”100“',这可能与它们的”数字“等同。相反,对于这样的问题,使用'cut(x,c(0,20,50,100),labels = c(“small”,“med”,“large”))' –