从 R 中的列表中采样元素
Sampling an element from a list in R
我有一个名为 MyList
的列表,如下所示:
[[1]]
[1] 5
[[2]]
integer(0)
[[3]]
[1] 5 16
[[4]]
[1] 9
[[5]]
integer(0)
我想对数字 5、5、16、9 之一以及它来自哪个列表元素进行采样。例如。如果选择前 5 个,我希望样本结果为 c(1,5),但如果选择第二个 5,我希望结果为 c(3,5)。我也不想在采样中包含空值 integer(0)
。
一种方法是将此列表放入更易于管理的数据结构(如矩阵或数据框)中,删除空值。
mat <- unname(do.call(rbind, Map(function(x, y)
if(length(y)) cbind(x, y), seq_along(MyList), MyList)))
mat
# [,1] [,2]
#[1,] 1 5
#[2,] 3 5
#[3,] 3 16
#[4,] 4 9
然后 select 矩阵中的任意一行。
mat[sample(nrow(mat), 1),]
数据
MyList <- list(5, integer(0), c(5, 16), 9, integer(0))
我有一个名为 MyList
的列表,如下所示:
[[1]]
[1] 5
[[2]]
integer(0)
[[3]]
[1] 5 16
[[4]]
[1] 9
[[5]]
integer(0)
我想对数字 5、5、16、9 之一以及它来自哪个列表元素进行采样。例如。如果选择前 5 个,我希望样本结果为 c(1,5),但如果选择第二个 5,我希望结果为 c(3,5)。我也不想在采样中包含空值 integer(0)
。
一种方法是将此列表放入更易于管理的数据结构(如矩阵或数据框)中,删除空值。
mat <- unname(do.call(rbind, Map(function(x, y)
if(length(y)) cbind(x, y), seq_along(MyList), MyList)))
mat
# [,1] [,2]
#[1,] 1 5
#[2,] 3 5
#[3,] 3 16
#[4,] 4 9
然后 select 矩阵中的任意一行。
mat[sample(nrow(mat), 1),]
数据
MyList <- list(5, integer(0), c(5, 16), 9, integer(0))