我正在尝试使用名为kc2到kc10的不同数据框创建具有值的列表。有人给我一些建议如何制定这个for循环吗?
sum_square=append(sum_square,weighted.mean(x=kc2$withinss,w=kc2$size, na.rm=TRUE))
我尝试了类似的东西,但没有工作:
for (i in 2:10){
nam1 = paste0("kc",i,"$withinss")
nam2 = paste0("kc",i,"$size")
sum_square = append(sum_square, lapply(c(as.numeric(nam1),as.numeric(nam2)), weighted.mean))
}
答案 0 :(得分:1)
您发布的代码存在很多问题,所以我只是切入点。在R中,当您想要将函数应用于多个对象并收集结果时,您应该考虑使用lapply
。 lapply
遍历对象列表(您可以将数据框放入列表中),将所选函数应用于每个对象,然后将每个结果作为列表返回。以下代码采用您想要的形式:
# Add data frames to list by name
list_of_data_frames <- list(kc2, kc3, kc4, kc5, kc6, kc7, kc8, kc9, kc10)
# OR add them programatically
list_of_data_frames <- mget(paste0('kc', seq.int(from = 2, to = 10)))
result <- lapply(list_of_data_frames,
function(x) weighted.mean(x = x$withiniss, w = x$size, na.rm=TRUE))