带列表的sample()

时间:2011-09-30 22:44:52

标签: r

可以从类似于下面的列表中随机抽样单个列。

list(combinations(4,3,1:4),combinations(4,2,1:4))
[[1]]
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    2    4
[3,]    1    3    4
[4,]    2    3    4

[[2]]
    [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    2    3
[5,]    2    4
[6,]    3    4

我试图将列组合成1d矩阵列表,例如。 list(matrix [,1],matrix [,2] ...),但是也无法正常工作。由于矩阵具有不同的维度,我不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

您可以使用lapplyas.vectordo.call的简单应用来执行此操作:

l <- list(matrix(1:16,4,4),matrix(1:8,4,2),matrix(1:20,4,5))                        
rs <-lapply(l,as.vector)
matrix(do.call(c,rs),ncol = 1)

但这是我的最后一次尝试。如果你再次更改问题,我只是删除它并继续前进。 ;)

答案 1 :(得分:1)

这是一种方法,首先将矩阵展平为列列表:

> library(gtools)
> matrices <- list(combinations(4,3,1:4),combinations(4,2,1:4))
> columns <- do.call(c, lapply(matrices, function(x) as.list(as.data.frame(x))))
> columns
$V1
[1] 1 1 1 2

$V2
[1] 2 2 3 3

$V3
[1] 3 4 4 4

$V1
[1] 1 1 1 2 2 3

$V2
[1] 2 3 4 3 4 4

> columns[[sample(length(columns), 1)]]
[1] 1 1 1 2 2 3
> columns[[sample(length(columns), 1)]]
[1] 2 3 4 3 4 4
> columns[[sample(length(columns), 1)]]
[1] 2 2 3 3