Зацикливание функций на основе элементов списка - PullRequest
0 голосов
/ 12 апреля 2019

У меня возникли проблемы при попытке зациклить функцию на основе списка и создать таблицу результатов.

head(Dat17_18.3[,c(1,3:5)])
                     Program Area I.E.ScoreStat I.I.ScoreStat I.P.ScoreStat
1             BFA - Art Education             2             2             2
2 BA - Foreign Language Education             2             2             3
3      MAT - Elementary Education             2             2             2
4            BA - Dance Education             2             3             3
5      MAT - Elementary Education             2             3             3
6      MAT - Elementary Education             2             2             3

Я использовал функцию split для создания списка программных областей.

test1<- split(Dat17_18.3, Dat17_18.3$`Program Area`)

Я написал функцию для извлечения элементов из функции alpha в пакете psych.

alpha_fun <- function (df,columns){
  library(psych)
  a1 <- alpha(df[,columns])
  a2 <- alpha.ci(a1[[1]][1],nrow(df),length(columns))
  vec1 <- c(nrow(x),a1[[1]][1],a2[1],a2[3],a1[[1]][3])
  return(vec1)
}

Я хочу запустить alpha_fun для каждого элемента в тестовом элементе, чтобы создать таблицу для всех областей программы одновременно.

1 Ответ

1 голос
/ 12 апреля 2019

Рассмотрим by (объектно-ориентированную оболочку для tapply), которая похожа на split + lapply, где функция может быть непосредственно применена к каждому подмножеству группировки фреймов данных. Кроме того, избегайте необходимости в параметре columns , который можно получить из фрейма данных, введенного внутри метода:

library(psych)

alpha_fun <- function (df){   
  sub <- df[, 3:ncol(df)]              # KEEP ONLY NUMERIC COLS

  a1 <- alpha(sub)
  a2 <- alpha.ci(a1[[1]][1], nrow(sub), ncol(sub))
  vec1 <- c(nrow(sub), a1[[1]][1], a2[1], a2[3], a1[[1]][3])

  return(vec1)
}

# LIST OF VECTORS 
alpha_vec_list <- by(Dat17_18.3, Dat17_18.3$`Program Area`, alpha_fun)

# MATRIX WITH Program Area AS ROW NAMES
alpha_mat <- do.call(rbind, alpha_vec_list)
...