используйте цикл 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 ответ:
Я бы очень рекомендовал избегать
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))