2015-12-23 157 views
1

我有名字創建了以下動態列表cluster_1,cluster_2 ......像這樣內的動態創建列表:我已經削減[R調用for循環

observedUserShifts <- vector("list") 
cut <- 2 

for (i in 1:cut) { 
    assign(paste('cluster_', i, sep=''), subset(sortedTestRTUser, cluster==i)) 
    observedUserShifts[[i]] <- mean(cluster_1$shift_length_avg) 
} 

通知= 2 SO 2個列表創建動態地使用由於「分配」功能而產生的名稱:cluster_1和cluster_2

我想在for循環中調用上述每個列表。請注意,我在for循環中有硬編碼的cluster_1(for循環內的第二行)。我如何改變這個,以便它不被硬編碼?

我想:

> observedUserShifts[[i]] <- mean((paste('cluster_','k',sep='')$shift_length_avg) 
+) 
Error in paste("cluster_", "k", sep = "")$shift_length_avg : 
$ operator is invalid for atomic vectors 
+2

由於多種原因,這不是找到每個羣集內平均值的好方法。相反,使用aggregate,data.table或dplyr,如[在此問題中所述](http://stackoverflow.com/questions/21982987/mean-per-group-in-a-data-frame) –

+0

例如,你可以簡單地做'library(dplyr); sortedTestRTUser%>%group_by(cluster)%>%summarize(observedUserShifts = mean(shift_length_avg))' –

回答

0

同意這是次優的編碼實踐,但回答的具體問題,用get

for (i in 1:cut) { 
    assign(paste('cluster_', i, sep=''), subset(sortedTestRTUser, cluster==i)) 
    observedUserShifts[[i]] <- 
      mean(get(paste('cluster_', i, sep=''))[['shift_length_avg']]) 
} 

注意,而不是使用$我選擇使用[[與一個引用的列名。