为了简化未来的数据分析,我想编写一个脚本,将确定包括在data.frame不同的自我报告的尺度和各规模的项目进行常规分析。目前,我希望它能够确定哪些量表存在,找到每个量表项目的响应,然后计算每个量表的Cronbach's Alphas。函数内变量类不同吗?
一切似乎当我运行我的功能应该产生阿尔法的列表(除非是工作)输出每个刻度我得到以下错误:
> Cronbach.Alphas(scales.data, scale.names)
Error in alpha(data[, responses[[i]]]) :
Data must either be a data frame or a matrix
很明显,我知道这是说的信息被赋予的alpha()函数不是data.frame或matrix。我很困惑,虽然原因是,当我做这些计算手动一步一步我Cronbach.Alphas()函数外,它清楚地告诉我,这是一个data.frame,似乎像一个魅力的工作:
> class(scales.data[,responses[[1]]])
[1] "data.frame"
这使我发疯,我会非常感谢任何帮助解决这个问题。我的完整代码粘贴在下面。 (注:我是相当新的编程功能中的R所以我做事情的方式可能不是最优的任何额外的意见是值得欢迎的,以及。)
此外,它可能会帮助提一提,我的代码是旨在根据列名称中的下划线的存在标识比例名称。也就是说,“rsq_12”将比例指示为rsq,并将列作为对比例的第12项的回答。
require(psych)
##### Function for identifying names of scales present in the data file #####
GetScales <- function(x) {
find.scale.names <- regexec("^(([^_]+)_)", colnames(x))
scales <- do.call(rbind, lapply(regmatches(colnames(x), find.scale.names), `[`, 3L))
colnames(scales) <- "scale"
na.find <- ifelse(is.na(scales[,1]), 0, 1)
scales <- cbind(scales, na.find)
output <- scales[scales[,2] == 1,]
output[,1]
}
##### Function for calculating cronbach's alpha for each scale #####
Cronbach.Alphas <- function(data, scales){
for(i in 1:length(scales)){
if(i == 1) {
responses <- list(grep(scales[i], colnames(data)))
alphas <- list(alpha(data[,responses[[i]]]))
} else {
responses <- append(responses, list(grep(scales[i], colnames(data))))
alphas <- append(alphas, list(alpha(data[,responses[[i]]])))
}
}
return(alphas)
}
### Import data from .csv file ###
scales.data <- data.frame(read.csv(file.choose()))
### Identify each item's scale ###
scale.items <- GetScales(scales.data)
### Reduce to names of scales ###
scale.names <- cbind(scale.items, !duplicated(scale.items))
scale.names <- scale.names[scale.names[,2] == TRUE, 1]
scale.names
### Calculate list of alphas ###
Cronbach.Alphas(scales.data, scale.names)
是否有助于添加'α(数据[,响应[[I]],滴= FALSE])'? – 2013-02-23 14:02:21