我有一个清单:
direc <- structure(list(no_trades = 3L, sell_trades = 19L, buy_trades = 18L), .Names = c("no_trades", "sell_trades", "buy_trades"))
# $no_trades
# [1] 3
#
# $sell_trades
# [1] 19
#
# $buy_trades
# [1] 18
我想在此列表中创建一个没有维度名称的矩阵。这与此矩阵结构类似:
classified <- structure(c(9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13), .Dim = c(3L, 15L))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
# [1,] 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
# [2,] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
# [3,] 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
我尝试了另一个用于数据帧到矩阵转换的SO question代码:
m2 <- `dimnames<-`(as.matrix(direc), NULL)
但它又给了我一个清单:
结构(列表(3L,19L,18L),. Dim = c(3L,1L))
提前感谢您的回答。
答案 0 :(得分:1)
此处'direc'为list
,转换为matrix
且as.matrix
不会直接转换,但我们可以matrix
将其更改为rbind/cbind
}}。最初的direc
元素都是integer
类。如果我们需要numeric
类,则需要转换
m1 <- `dimnames<-`(do.call(cbind, lapply(direc, as.numeric)), NULL)
dput(m1)
#structure(c(3, 19, 18), .Dim = c(1L, 3L))
如果list
元素的长度不相等,那么在执行cbind
`dimnames<-`(do.call(cbind, lapply(direc, `length<-`, max(lengths(direc)))), NULL)
要理解为什么as.matrix
在这里不起作用,我们可以查看methods
的{{1}}
list
它没有methods(class = "list")
#[1] all.equal as.data.frame as.data.table as_data_frame
#[5] coerce escape melt Ops relist
#[10] sotrunc within
选项。