爲了簡化未來的數據分析,我想編寫一個腳本,將確定包括在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