这些是50个矩阵,但分为子列表和有序。我需要的是一个包含50个矩阵的随机顺序列表,同时保留0-10字符的名称。例如:
0: [1:28, 1:28] 0 0 0 ...
5: [1:28, 1:28] 0 0 0 ...
3: [1:28, 1:28] 0 0 0 ...
0: [1:28, 1:28] 0 0 0 ...
8: [1:28, 1:28] 0 0 0 ...
8: [1:28, 1:28] 0 0 0 ...
答案 0 :(得分:2)
如果没有数据集示例,我不知道这是否会运行,但现在就可以了。
set.seed(3694)
inx <- sample(names(trainData), 50, TRUE)
tmp <- lapply(inx, function(i){
lst <- trainData[[i]]
mat <- lst[[sample(seq_along(lst), 1)]]
list(i, mat)
})
result <- lapply(tmp, `[[`, 2)
names(result) <- sapply(tmp, `[[`, 1)
rm(tmp)
修改强>
通过CPak测试数据,更正了结果名称中的错误。它现在似乎做了OP所要求的。
答案 1 :(得分:1)
使用样本(...)怎么样?第二次运行它会给你新的排列:
> a = list('0'=list(2,3),'1'=2,'2'=3)
> a
$`0`
$`0`[[1]]
[1] 2
$`0`[[2]]
[1] 3
$`1`
[1] 2
$`2`
[1] 3
> sample(a,length(a))
$`1`
[1] 2
$`2`
[1] 3
$`0`
$`0`[[1]]
[1] 2
$`0`[[2]]
[1] 3
> sample(a,length(a))
$`2`
[1] 3
$`1`
[1] 2
$`0`
$`0`[[1]]
[1] 2
$`0`[[2]]
[1] 3
答案 2 :(得分:1)
你可以试试这个
数据
data <- lapply(1:10, function(i) lapply(1:5, function(j) matrix(1:(28*28), nrow=28)))
names(data) <- 1:10
str(data)
# List of 10
# $ 1 :List of 5
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 2 :List of 5
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# etc
purrr::flatten
您的列表
编辑如果每个列表的长度不同,您可以使用names(result) <-
rep(1:length(data), times=(lengths(data)))
代替
library(purrr)
result <- flatten(data)
names(result) <- rep(1:length(data), times=(lengths(data)))
str(result)
# List of 50
# $ 1 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 1 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 1 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 1 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 1 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 2 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 2 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 2 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# etc
随机
set.seed(1)
ans <- result[sample(1:50)]
str(ans)
# List of 50
# $ 3 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 4 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 6 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 9 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 2 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 9 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 9 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# $ 6 : int [1:28, 1:28] 1 2 3 4 5 6 7 8 9 10 ...
# etc