次のようなリストがあります。
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
andlength(list.1$c)==3
を使用して、 とlist.1$b
から値をランダム化list.1$a
し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)
}