追加for循环

时间:2018-04-23 21:18:36

标签: r for-loop assign

我正在尝试使用名为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))
 }

1 个答案:

答案 0 :(得分:1)

您发布的代码存在很多问题,所以我只是切入点。在R中,当您想要将函数应用于多个对象并收集结果时,您应该考虑使用lapplylapply遍历对象列表(您可以将数据框放入列表中),将所选函数应用于每个对象,然后将每个结果作为列表返回。以下代码采用您想要的形式:

# 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))