x是1到100之间的整数向量
我创建了一个函数,用于确定数字的类别:
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”而不是“big”。
答案 0 :(得分:1)
这确实是上述评论中提到的强制问题。 如果要按照创建函数的方式保留函数结构,可以按如下方式更改它:
vector.fun<-function(y){
x <- y
x[y >= 1 & y <=20] <-"small"
x[y >= 21 & y <=50] <-"med"
x[y >=51 & y <=100] <-"large"
return(x)
}
虽然@alexis_laz建议的解决方案更简洁,更优雅:
vector.fun<-function(x){
cut(x, c(0,20,50,100), labels = c("small", "med", "large"))
}
请记住,第二个版本将生成 factor 类型向量,而第一个版本将生成字符类型向量。