如何在R的data.table中添加存储hclust类对象的列?
可以构建存储类对象的data.table列
你遇到的错误是因为hclust对象本质是带类属性的列表(包含7个元素),直接赋值时data.table会尝试将列表的每个元素拆分后对应到行,导致元素数量不匹配。要把整个hclust对象作为单个单元格的值,只需将其包装为单元素列表即可。
修正后的代码示例
方法1:赋值时用list()包裹对象
library(fastcluster) library(data.table) D <- dist(c(1,2,3,22,23)) C <- hclust(D, method="average") dtTrials <- data.table(Idx=1L) # 关键:用list(C)代替C dtTrials[Idx==1, Clust:=list(C)]
方法2:先创建空列表列再赋值
# 初始化时直接创建列表类型的列 dtTrials <- data.table(Idx=1L, Clust=vector("list", 1)) dtTrials[Idx==1, Clust[[1]] := C]
验证结果
查看列中对象的类型:
class(dtTrials$Clust[[1]]) # [1] "hclust"
此时dtTrials的结构就符合你的预期:每行的Clust单元格存储一个完整的hclust类对象,后续可以继续添加更多行的对象,比如:
# 添加第二个hclust对象 D2 <- dist(c(4,5,6,24,25)) C2 <- hclust(D2, method="average") dtTrials <- rbind(dtTrials, data.table(Idx=2L, Clust=list(C2)))
内容的提问来源于stack exchange,提问作者C8H10N4O2
相关产品推荐
相关产品推荐

