首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中,对数据帧列表迭代函数,然后将输出存储到列表中,其中每个输出元素由输入数据帧命名

在R中,对数据帧列表迭代函数,然后将输出存储到列表中,其中每个输出元素由输入数据帧命名
EN

Stack Overflow用户
提问于 2020-11-06 12:06:32
回答 1查看 59关注 0票数 0

嗨,我有几个数据帧,每个数据帧代表接受某种处理的样本,我已经将它们组合到一个列表中,想法是我想在列表中的每个元素/数据帧上测试Kmeans聚类方法。

假设我将这7个数据帧绑定到一个列表中。以下是其中两个示例数据https://drive.google.com/drive/folders/1B8JQY94Z-BHTZEKlV4dvUDocmiyppBDa?usp=sharing

每个数据帧具有相同的结构:多行样本和107列变量,但第一列和第二列只是数据标签,例如实际的药物治疗。

我想对这些数据帧中的每一个执行Kmeans聚类,希望从它们中找到具有代表性的样本进行下游处理。

因此,我构建了一个名为Kmeans.list的输出列表来存储结果。我把这个放到循环中是正确的吗?具体地说,这是为了获取列表中的第i个数据帧,并且只获取实际的数值变量列,然后mylist[i] ()将其用于k均值聚类。

我没有成功测试的原因是我对输出也感到困惑。kmeans()函数输出一个列表,我对这个列表特别感兴趣的是“center”。我只想将每个中心的结果存储到一个列表中,这样我就可以向下迭代其他东西。这是可能的吗,或者我必须将所有的kmeans输出存储到这个列表中,然后以某种方式取出中心并绑定它们。

无论哪种方式,我都必须能够使用唯一的名称来存储每个kmeans输出,这样我才能区分它们。如何确保输出列表中的每个元素都以输入数据帧命名?如名称<-Kmeans.list1为df1,依此类推

代码语言:javascript
复制
mylist <- list(df1,df2,df3...)

#kmeans this in a loop
#store output in a list
Kmeans.list <- list()

for (i in length(mylist)) {

  Kmeans.list[i] <- kmeans(scale(mylist[[i]][,-c(1:2)]),centers =15,nstart=50,iter.max = 100)

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-06 16:55:30

使用tidyverse

如果我没理解错的话

代码语言:javascript
复制
library(FNN)
library(tidyverse)
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"))

Kmeans_centers <- map(Kmeans.list, ~.x$centers)


n500 <- map2(
  .x = mylist,
  .y = Kmeans_centers,
  .f = ~ get.knnx(data = scale(.x[, -c(1:2)]), query = .y, k = 500)) %>% 
  purrr::set_names(c("df1", "df2"))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64708720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档