используйте цикл for или lapply для перебора различных фреймов данных в списке в R


Я прошу прощения, если этот вопрос кажется рудиментарным. Мне немного неясно, возможно ли / как использовать циклы со списком фреймов данных в R.

У меня есть фреймы данных, которые являются подмножествами большего фрейма данных:

billysuzy <- subset(userlist,user1 %in% c("billy","suzy"))
joefrank<- subset(userlist,user1 %in% c("joe","frank"))
georgelenny <- subset(userlist,user1 %in% c("george","lenny"))

Я хотел бы перебрать и найти значения корреляции для одних и тех же переменных (time и simscore) для каждого подмножества.

cor(time, simscore)
Однако я совершенно не уверен, как структурировать такой цикл for, и не уверен, как структурировать функцию для присоединения и отсоединения в lapply.

Я думал:

somelist <- list(billysuzy, joefrank, georgelenny)

С лапли:

corz <-  lapply(somelist, function(df)  detach(), attach(df),cor(time, simscore))
lapply(corz, print)    

Или с for:

for (i in 1:length(somelist)){
      detach()
     attach(somelist[i])
    cor(time, simscore)
    }

Я прошу прощения за то, что оскорбляю чьи - либо чувства R или если кажется, что два вопроса-ответ любой, который описывает, как сделать одну вещь, т. е. петлю через dfs в списке и найти там значения corr.

1 2

1 ответ:

Я бы очень рекомендовал избегать attach и detach.

Вы могли бы попробовать что-то вроде этого

corz <-  lapply(somelist, function(df)  cor_time_sim = cor(df$time, df$simscore))

Или

corz <-  lapply(somelist, function(DF)  {with(DF, corst <-  cor(time, simscore))})

Или

corz <-  lapply(somelist, with, corst <-  cor(time, simscore))