मैं कुछ हफ्ते पहले भी ऐसा ही कर रहा हूं। यहां एक संभावित समाधान है, यह खरोंच से लिखा गया है, इसलिए यह बीटा-रिलीज़ या ऐसा कुछ है। मैं कोड से छोरों को हटाकर इसे बेहतर बनाने की कोशिश करूंगा ...
मुख्य विचार एक फ़ंक्शन लिखना है जो 2 (या 3) तर्क लेगा। पहला वह है data.frame
जो प्रश्नावली से एकत्रित डेटा को रखता है, और दूसरा सही उत्तरों के साथ एक संख्यात्मक वेक्टर है (यह केवल एकल विकल्प प्रश्नावली के लिए लागू है)। वैकल्पिक रूप से, आप तीसरा तर्क जोड़ सकते हैं जो अंतिम स्कोर के साथ संख्यात्मक वेक्टर लौटाएगा, या एम्बेडेड स्कोर के साथ डेटा.फ्रेम।
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)
}
मैं कुछ * प्लाई फ़ंक्शन के साथ इसे और अधिक सुरुचिपूर्ण तरीके से करने की कोशिश करूंगा। ध्यान दें कि मैंने na.rm
तर्क नहीं दिया ... ऐसा करेंगे
# 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))
अब एक फ़ंक्शन लागू करें:
> fscore(d, sol)
[1] 6 4 2 4 4 3 3 6 2 6
यदि आप डेटा.फ़्रेम तर्क पास करते हैं, तो यह संशोधित डेटा.फ़्रेम लौटाएगा। मैं इसे ठीक करने की कोशिश करूँगा ... आशा है कि यह मदद करता है!
table(c(FALSE))["TRUE"]
NA देता है, न कि 0.