R:如何重新排列列表对象

R:如何重新排列列表对象,r,list,R,List,我的直觉是使用lappy循环遍历矩阵的列并将它们存储在新列表中,但我不确定如何有效地执行此操作。您可以绑定、按列拆分并转换回矩阵: [[1]] [,1] [,2] [,3] [1,] 1 2 43 [2,] 2 3 90 [3,] 3 9 1 [[2]] [,1] [,2] [,3] [1,] "red" "green" "black" [2,] "blue" "blue" "red" [3,]

我的直觉是使用
lappy
循环遍历矩阵的列并将它们存储在新列表中,但我不确定如何有效地执行此操作。

您可以绑定、按列拆分并转换回矩阵:

[[1]]
     [,1] [,2] [,3]
[1,]    1    2   43
[2,]    2    3   90
[3,]    3    9    1

[[2]]
     [,1]    [,2]    [,3]   
[1,] "red"   "green" "black"
[2,] "blue"  "blue"  "red"  
[3,] "green" "green" "green"

[[3]]
     [,1]     [,2]     [,3]        
[1,] "apple"  "apple"  "orange"    
[2,] "banana" "guava"  "watermelon"
[3,] "orange" "orange" "orange"   

您可以
取消列表
,然后
再次将其拆分为
列表
。我在其中添加了一个
类型。convert
,将第一组值转换为数值

lapply(asplit(do.call(rbind, mylist), 2), matrix, 3)

[[1]]
     [,1] [,2] [,3]
[1,] "1"  "2"  "43"
[2,] "2"  "3"  "90"
[3,] "3"  "9"  "1" 

[[2]]
     [,1]    [,2]    [,3]   
[1,] "red"   "green" "black"
[2,] "blue"  "blue"  "red"  
[3,] "green" "green" "green"

[[3]]
     [,1]     [,2]     [,3]        
[1,] "apple"  "apple"  "orange"    
[2,] "banana" "guava"  "watermelon"
[3,] "orange" "orange" "orange"    

没有任何
lappy
调用的短基R方法:

asplit(`dim[[1]]
#>      [,1] [,2] [,3]
#> [1,] "1"  "2"  "43"
#> [2,] "2"  "3"  "90"
#> [3,] "3"  "9"  "1" 
#> 
#> [[2]]
#>      [,1]    [,2]    [,3]   
#>[1,]“红色”“绿色”“黑色”
#>[2,]“蓝色”“蓝色”“红色”
#>[3,]“绿色”“绿色”“绿色”
#> 
#> [[3]]
#>      [,1]     [,2]     [,3]        
#>[1,]“苹果”“苹果”“橙色”
#>[2]“香蕉”“番石榴”“西瓜”
#>[3,]“橙色”“橙色”“橙色”

很好。我想你在这里比我高出了2个字节!精简和改进的版本
asplit(Simplified2Array(mylist),2)
@27ñ9绝妙的解决方案!
lapply(asplit(do.call(rbind, mylist), 2), matrix, 3)

[[1]]
     [,1] [,2] [,3]
[1,] "1"  "2"  "43"
[2,] "2"  "3"  "90"
[3,] "3"  "9"  "1" 

[[2]]
     [,1]    [,2]    [,3]   
[1,] "red"   "green" "black"
[2,] "blue"  "blue"  "red"  
[3,] "green" "green" "green"

[[3]]
     [,1]     [,2]     [,3]        
[1,] "apple"  "apple"  "orange"    
[2,] "banana" "guava"  "watermelon"
[3,] "orange" "orange" "orange"    
lapply(split(unlist(mylist), rep(1:3, each = 3)), function(x) matrix(type.convert(x), 3))
## $`1`
##      [,1] [,2] [,3]
## [1,]    1    2   43
## [2,]    2    3   90
## [3,]    3    9    1
## 
## $`2`
##      [,1]    [,2]    [,3]   
## [1,] "red"   "green" "black"
## [2,] "blue"  "blue"  "red"  
## [3,] "green" "green" "green"
## 
## $`3`
##      [,1]     [,2]     [,3]        
## [1,] "apple"  "apple"  "orange"    
## [2,] "banana" "guava"  "watermelon"
## [3,] "orange" "orange" "orange"    
##