我有一个看起来像这样的列表:
list.1 <- list(a=c(0.1,0.2,0.2,0.3,0.12),
b=c(0.1,0.2),
c=c(0.3,0.1,0.2),
d=c(0.1,0.3,0.4,0.5))
我想生成一个带有随机(置换)值的新列表list.1
,我的方法如下:
rand.list <- lapply(list.1, FUN=function(x) replicate(10, sample(x,1)))
但是,如果列表中一个元素的长度小于一个数字,例如 4,那么我还想使用列表中的其他元素(前一个和下一个)来计算排列,同时考虑到所有元素的长度这些元素> 4。例如,在我的列表中,length(list.1$b) == 2
and length(list.1$c)==3
,我想用于list.1$b
从 and 中随机化值,以及从list.1$a
and中list.1$c
随机化list.1$c
值。任何想法如何实现这一目标?list.1$b
list.1$d
提前谢谢了
更新
为@dardisco 提供的解决方案:
l2 <- list()
ll1 <- length(list.1)
length(l2) <- ll1
set.seed(4)
for (i in 1:ll1){
vec1 <- list.1[[i]]
jl <- 1;jr<-1; #i've added two counters one for left one for right
while (length(vec1) < 4){
if(i==1) {
vec1 <- c(vec1, list.1[[i+jr]])
jr <- jr+1
} else if (i==ll1 || jr+i==ll1 ){ #to avoid out of boundaries, so many elements with less than 4 elements close to the end
vec1 <- c(vec1, list.1[[i-jl]])
jl <- jl+1
}else {
vec1 <- c(vec1, list.1[[i-jl]], list.1[[i+jr]])
jl <- jl+1
jr <- jr+1
}
}
l2[[i]] <- sample2(vec1, 10, replace=TRUE)
}