Birkaç hafta önce benzer bir şey yapıyordum. İşte olası bir çözüm, sıfırdan yazıldı, bu yüzden bir tür beta sürümü veya bunun gibi bir şey. Koddan döngüler kaldırarak onu geliştirmeye çalışacağım ...
Ana fikir, 2 (veya 3) argüman alacak bir işlev yazmaktır. Birincisi data.frame
, anketten toplanan verileri tutan ve ikincisi doğru cevapları olan sayısal bir vektördür (bu sadece tek seçenekli anket için geçerlidir). Alternatif olarak, son vektör ile sayısal vektör döndürecek üçüncü argüman veya gömülü puan ile data.frame ekleyebilirsiniz.
fscore <- function(x, sol, output = 'numeric') {
if (ncol(x) != length(sol)) {
stop('Number of items differs from length of correct answers!')
} else {
inc <- matrix(ncol=ncol(x), nrow=nrow(x))
for (i in 1:ncol(x)) {
inc[,i] <- x[,i] == sol[i]
}
if (output == 'numeric') {
res <- rowSums(inc)
} else if (output == 'data.frame') {
res <- data.frame(x, result = rowSums(inc))
} else {
stop('Type not supported!')
}
}
return(res)
}
Bunu bazı * kat fonksiyonları ile daha zarif bir şekilde yapmaya çalışacağım. Ben koymadığını Bildirimi na.rm
argüman ... böyle yapar
# create dummy data frame - values from 1 to 5
set.seed(100)
d <- as.data.frame(matrix(round(runif(200,1,5)), 10))
# create solution vector
sol <- round(runif(20, 1, 5))
Şimdi bir işlev uygulayın:
> fscore(d, sol)
[1] 6 4 2 4 4 3 3 6 2 6
Data.frame bağımsız değişkenini iletirseniz, değiştirilen data.frame döndürülür. Bunu düzeltmeye çalışacağım ... Umarım yardımcı olur!
table(c(FALSE))["TRUE"]
NA değil 0 verir.