基于列表元素循环函数

Looping a functions based on elements of a list

我在尝试基于列表循环函数并创建 table 结果时遇到了一些问题。

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`)

我写了一个函数来从 psych 包中的 alpha 函数中提取元素。

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 运行,以便同时为所有程序区域创建一个 table。

考虑 bytapply 的面向对象包装器),它类似于 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)