带有太多ifelse语句的条件语句

时间:2017-06-05 22:27:46

标签: r if-statement

我有以下数据:

my.list<-list(a=c(55,17,18,18,18,21),
b=c(11,17,17,17,22,18,22),
c=c(55,17,22,22,22,22,22,21,30))    

x<-c(1,1,1,1,2,2,3,3,3,3,3,3,3,3,3)    

set.seed(1)    

my.function <- function(x) {

ifelse(x == 1,sample(my.list$a,replace = T),
ifelse(x == 2,sample(my.list$b,replace = T),
ifelse(x == 3,sample(my.list$c,replace = T)


)))    
}        

p<-sapply(x, my.function)    

在&#34;真实&#34;数据集我有比上面显示的更多ifelse语句,代码太长。

是否有更智能的解决方案,所以我不需要写这么多ifelse语句?每个ifelse语句都与上面的唯一列表相关,具有不同的长度,我从中抽取样本。

2 个答案:

答案 0 :(得分:0)

x的双重用法使我有点困惑。如果我理解正确的话,

my.function <- function(x) {
   sample(my.list[[1]],size = 1,replace = T)
}

应该给你你想要的东西。

答案 1 :(得分:0)

已修改

为了避免@thelatemail指出ifelse()的奇怪之处并避免依赖全球环境,我建议

my.list<-list(a=c(55,17,18,18,18,21), b=c(11,17,17,17,22,18,22), c=c(55,17,22,22,22,22,22,21,30))    

x<-c(1,1,1,1,2,2,3,3,3,3,3,3,3,3,3)    

set.seed(1)    

my.function <- function(x, list) {
  sample(list[[x]], replace = T)
}        

p<-sapply(x, my.function, list=my.list)