【发布时间】:2020-11-10 04:08:50
【问题描述】:
所以我尝试对列表中的每个元素(数据帧)执行 Kmeans 聚类,从 kmeans 聚类的输出中,我选取了与每个数据帧匹配的“中心”,并将所有中心绑定到另一个列表中。
接下来,我要做的是使用函数 get.knnx(),这样我就可以使用 kmeans 聚类生成的每个中心,然后返回到原始数据帧来采样 500 个最接近的数据点到中心,以实现数据的良好二次抽样。 (我没有使用分配的kmeans集群成员的原因是因为执行kmeans的数据只是原始数据集的子采样用于训练)
每个数据框都有相同的结构:多行样本和 107 列变量,但第 1 列和第 2 列只是数据标签,例如实际药物治疗。
这是指向 2 个示例数据的链接 https://drive.google.com/drive/folders/1B8JQY94Z-BHTZEKlV4dvUDocmiyppBDa?usp=sharing
library(tidyverse)
library(purr)
#take data into list
mylist <- list(df1,df2,df3...)
#perform Kmeans cluster
#scale datainput and drop the data label column
Kmeans.list <- map(.x = mylist,
.f = ~kmeans(scale(.x[,-c(1:2)]),
centers =15,
nstart=50,
iter.max = 100)) %>%
purrr::set_names(c("df1", "df2"))
#Isolate the Centers info to another list
Kmeans_centers <- map(Kmeans.list, ~.x$centers)
#trying to use map2
y <- map2(.x = mylist,.y=Kmeans_centers,
.f=~get.knnx(scale(.x[,-c(1:2)],.y, 500)))
感谢 Stackoverflow 上的传奇人物的帮助,我设法让 kmeans 工作并获得了中心列表。现在我想用同样的逻辑来使用map2()
现在我从 map2 得到的错误是“Scale.default(.x[, -c(1:2)], .y, 500) 中的错误: 'center' 的长度必须等于 'x' 的列数”
但是,两个列表都有 7 个元素,我不太清楚出了什么问题。
其他问题是关于 .f= 参数中的 ~。我读到如果我有一个函数输入,我不需要添加〜,但是,在这种情况下,如果我删除〜,错误说x not found。那么为什么这里需要 ~,我应该总是把 ~ 放在我放在 map() 参数中的函数前面吗?
【问题讨论】:
标签: r list knn map-function