我有以下数据:
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语句都与上面的唯一列表相关,具有不同的长度,我从中抽取样本。
答案 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)