как создать для цикла в г - PullRequest
0 голосов
/ 05 ноября 2018

Я хотел бы создать для цикла throgh norm1 ~ norm31.

norm1 = norm1 %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T))

norm2 = norm2 %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T))

Я бы хотел создать norm1 ~ norm31, как указано выше.

Я пробовал этот код, но получаю сообщение об ошибке.

for (i in 1:31){
nam=paste("norm",i,sep="")
assign(nam,nam %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T)))}

[Ошибка] Ошибка в UseMethod ("group_by_"): нет применимого метида для "group_by_", примененного к объекту класса "Character"

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Во-первых, давайте соберем все ваши нормы в единый список:

normlist<-lapply(paste0("norm",1:31),get)

Теперь мы можем использовать lapply, чтобы выполнить свою задачу для каждой из норм:

thing<-function(x) {x %>% group_by(ID_Pair) %>%
  summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T),
    Norm_avg_BT=mean(ID_avg_BT, na.rm=T))}

lapply(normlist,thing)

Пример с некоторыми поддельными данными:

a1<-data.frame(id=rep(letters[1:5],3),nums=1:15)
a2<-data.frame(id=rep(letters[6:10],3),nums=16:30)
alist<-lapply(paste0("a",1:2),get)
thing<-function(x) {x %>% group_by(id) %>% summarize(means=mean(nums))}
lapply(alist,thing)
[[1]]
# A tibble: 5 x 2
  id    means
  <fct> <dbl>
1 a        6.
2 b        7.
3 c        8.
4 d        9.
5 e       10.

[[2]]
# A tibble: 5 x 2
  id    means
  <fct> <dbl>
1 f       21.
2 g       22.
3 h       23.
4 i       24.
5 j       25.

Если вы хотите сохранить имена, вы можете использовать sapply с simplify=FALSE вместо lapply.

0 голосов
/ 05 ноября 2018

Могут быть более эффективные способы организации ваших данных. Но, если хотите, использование get() может решить вашу проблему.

for (i in 1:31){
    nam=get(paste("norm",i,sep=""))
    assign(nam,nam %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T)))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...