আমি কয়েক সপ্তাহ আগে অনুরূপ কিছু করছি। এখানে একটি সম্ভাব্য সমাধান, এটি স্ক্র্যাচ থেকে লেখা হয়েছে, সুতরাং এটি বিটা-রিলিজ বা এটির মতো কিছু। আমি কোড থেকে লুপগুলি সরিয়ে এটিকে উন্নত করার চেষ্টা করব ...
মূল ধারণাটি হ'ল একটি ফাংশন লিখুন যা 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"]এনএ, 0