我的数据如下:
List_of_lists = list("0" = list(4,6), "1" = list(6,8), "2" = list(7,9),
"3" = list(4,8), "4" = list(3,9,0), "6" = list(1,7,0),
"7" = list(2,6), "8" = list(1,3), "9" = list(2,4))
我想编写一个迭代函数,该函数首先从List_of_Moves
的第一个索引(即" 0")进行采样,然后对于后续迭代,从另一个列表中采样name与上一次迭代的结果匹配。换句话说,如果第一次迭代的结果是4,那么我从列表中采样,其名称为" 4" - 依此类推。
In" Hack-n-Slash" R形式,它看起来像这样:
> sample(unlist(List_of_lists"0",1,replace=TRUE)
4
> sample(unlist(List_of_lists"4",1,replace=TRUE)
3
> sample(unlist(List_of_lists"3",1,replace=TRUE)
8
> sample(unlist(List_of_lists"8",1,replace=TRUE)
1
> sample(unlist(List_of_lists"1",1,replace=TRUE)
6
答案 0 :(得分:3)
可能是这样的。我们对List_of_lists
中的元素进行抽样,将其存储为结果,并将其作为初始参数传递给下一轮,同时将大小减小1
直到我们遇到size
标准我们返回NULL
并迭代停止的地方:
r_ge <- function(init = "0", size) {
if(size == 0) NULL
else {
tmp <- sample(List_of_lists[[as.character(init)]], 1)
c(unlist(tmp), r_ge(tmp, size - 1))
}
}
用例:
r_ge(size = 5)
# [1] 4 9 2 9 2
r_ge(size = 5)
# [1] 6 1 8 1 6
r_ge(size = 5)
# [1] 6 0 4 9 4
r_ge(size = 5)
# [1] 4 9 4 0 4
答案 1 :(得分:3)
或者,我相信这也符合你的要求:
first_seed <- rbinom(n = 1, size = 9, prob = .5) # just to get a starting value
for (i in 1:20){
first_seed <- sample(x = unlist(List_of_lists[[as.character(first_seed)]][]), 1)
print(first_seed)
}
一些注意事项:rbinom()
并不适合获取第一个值,但我会留给您修改。此外,1:20仅用于演示目的,显然可以根据需要增加或减少迭代次数。