访问 R 中对象中的列表(剪影函数)
Posted
技术标签:
【中文标题】访问 R 中对象中的列表(剪影函数)【英文标题】:Access a list in an object in R (silhouette function) 【发布时间】:2018-06-13 14:23:45 【问题描述】:我使用 k-means 对 5 个集群进行聚类。
km <- kmeans(data1z, 5)
对于得到的聚类解决方案,我想仔细看看轮廓系数。
library(cluster)
kms <- silhouette(km$cluster, dist(data1z))
当我查看kms
时,我发现其中有一个包含 4 列的列表,其中包含观察编号、集群、邻居和 sil_width。
我的目标是访问此列表并将其保存为数据框。
输入attributes(kms)
,可以看到这个列表叫$dimnames[[2]]
。
不幸的是,我没有比命令attributes(kms)$dimnames[2]
更进一步,在那里我只能再次看到列标题。
是否有人提示如何访问此列表以及如何将其保存为数据框?
这是一个用于复制的数据集:
data1z <- structure(list(ewz_2015 = c(12.3021483912036, 6.00431244756797,
4.779267671771, 3.36240424966866, 2.17055661812825, 1.77453900433742,
1.73252006339734, 1.63802469941643, 1.62509551490745, 1.54457617410254,
1.53364252580256, 1.48406671823494, 1.44167702193362, 1.36102682629534,
1.29289507638349, 0.833125714742489, 0.779707863872641, 0.718075237351878,
0.666165851922353, 0.634288160569021, 0.62598614836252, 0.618807306809176,
0.548269281905782, 0.511353679467419, 0.453741204216529), `ewz_2011-2015%` = c(1.39613656271163,
0.607258369151278, 1.58299833983535, 0.869374153763874, 2.47422861813756,
1.26635046973522, 0.516361108243701, -0.0231779755856095, 0.138107778444893,
3.16774974965261, -0.0753473600679229, 1.04625956881232, 0.791887976779923,
0.620263594519286, -0.816319108567795, -0.893520732827146, -0.199721969111692,
-0.366631601460676, 0.449431084621143, 1.32617159421819, 1.20542758697938,
0.994137944732868, 1.59988312849927, -0.304095591697581, -0.75135416084694
), `wander_2011-2015Ø` = c(12.7557665621901, 4.35832738812673,
5.09045816442083, 2.64251455289482, 3.08786901008964, 1.91169325750985,
1.16450345076077, 0.983664137210036, 1.54693735027193, 3.41661419232651,
0.860114613433702, 1.37886547558521, 1.18414566439771, 1.20319861162554,
0.2222664625969, 0.165762361367978, 0.384183777010717, 0.0847054930928842,
0.362642816055543, 1.3209864194017, 0.834252365478401, 0.718821623338668,
0.925719606981072, 0.0520339444101122, 0.0355999590005416), alter_2015 = c(-0.795452185805918,
-1.07302292239275, -1.40333685910657, -1.34690303328897, -1.91815169287439,
-1.37100226741981, -0.595290898752181, -0.365235516337521, 0.0822720690988413,
-0.738268589162625, -0.178511147449755, -0.703870795263088, -0.990947412522991,
-0.534494948654483, -0.178710886267292, 0.334623380729479, -0.127973906699767,
-0.783759886944363, -1.45250245534342, -1.85605680531628, -1.17977119761638,
-1.1146728315242, -0.76966585145387, -0.717887352917514, -0.185025056153872
), `wohn_2015/ewz` = c(0.536981056223323, 0.0977036963071221,
0.439785877795005, 0.114031432514775, 0.0602824633607677, -0.500555610996494,
0.806802317088195, 0.393695162242274, 0.428285715377852, 1.76545423345811,
0.125639381279224, 0.744169728769213, 0.778027562679934, 0.402207878643676,
0.14118545812779, 0.57834537462665, 0.689548342207427, -0.209153915991276,
0.285452430924394, 0.1339991931372, -0.227290305128167, 0.524430279211976,
0.146456452575513, -0.173054623600596, 0.315209504451725)), .Names = c("ewz_2015",
"ewz_2011-2015%", "wander_2011-2015Ø", "alter_2015", "wohn_2015/ewz"
), row.names = c(NA, 25L), class = "data.frame")
【问题讨论】:
你用str
检查过你的“kms”对象了吗?通过这种方式,你能找出如何访问想要的组件吗?
【参考方案1】:
我是这样做的,希望对你有用。
km <- kmeans(data1z, 5)
library(cluster)
kms <- silhouette(km$cluster, dist(data1z))
class(kms)
kms2<-as.data.frame(cbind(cluster=kms[,1],neighbor=kms[,2],sil_width=kms[,3]))
class(kms2)
【讨论】:
【参考方案2】:我也花了一些时间在谷歌上搜索。
如果你运行 str(kms) 你会发现它是由一个矩阵组成的,然后是 3 个 attr(通过 attr() 访问)
例如
>str(some.silhouette.obj)
silhouette [1:137, 1:3] 1 2 2 1 1 1 1 1 1 1 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:3] "cluster" "neighbor" "sil_width"
- attr(*, "Ordered")= logi FALSE
- attr(*, "call")= language silhouette.default(x = as.numeric(km$cluster), dist = dist(data1z))
要将矩阵作为数据框拉出,只需执行以下操作:
>data.frame(kms[,1:3])
【讨论】:
以上是关于访问 R 中对象中的列表(剪影函数)的主要内容,如果未能解决你的问题,请参考以下文章