Пакет экзаменов — Настройка теста для moodle с несколькими упражнениями

#dynamic #moodle #r-exams

#динамический #moodle #r-экзамены

Вопрос:

Я пытаюсь настроить простое упражнение для moodle с помощью пакета экзаменов. Кажется, я что-то пропустил, и файл, который я импортирую в Moodle, не содержит всех элементов, которые должны быть включены. Код приведен ниже. Я был бы признателен за любую подсказку, которая могла бы помочь мне решить эту проблему. Код выглядит следующим образом:

     <<echo=FALSE, results=hide>>=
    id     <- seq(1:220)
    age    <- round(runif(220, 18, 60), 2)
    weight <- round(runif(220, 45,100), 2)
    gender <- sample(c("male", "female"), 220, replace=T)
    mydata <- data.frame(cbind(id, gender, age, weight))
    mydata$id     <- as.numeric(mydata$id)
    mydata$age    <- as.numeric(mydata$age)
    mydata$weight <- as.numeric(mydata$weight)
    write.csv(mydata, "DataQuiz1.csv", row.names = FALSE, quote = FALSE)
    @    

    begin{question}
    Using the data provided in url{DataQuiz1.csv} 
    begin{answerlist}
    item Report the variance of participants' texttt{weight} (rounded up to two decimal places).
    item Report what is the texttt{age} of the youngest person (rounded up to two decimal places).
    item Report wht is the texttt{age} of the eldest participant (rounded up to two decimal places).
    item Indicate what is the 3rd quartile for the variable texttt{weigh}  (rounded up to two places).
    item Write down how many participants are included in the texttt{DataQuiz1}.
    end{answerlist}
    end{question}

    begin{solution}
    <<echo=FALSE, results=hide, fig=TRUE>>=
    varsol  <- var(mydata$weight)
    minsol  <- min(mydata$age)
    maxsol  <- max(mydata$age)
    sol1   <-  print (summary(mydata)[5, 4 ])
    sol2  <- nrow(mydata)
    solutions <- c(varsol, minsol, maxsol, sol1, sol2)
    answerlist(ifelse(solutions, "True", "False"))
    @ 


   To replicate the analysis in R:
    begin{verbatim}
    ## data
    mydata <- read.csv("DataQuiz1.csv")
    ## To find the variance for weight:
    var(mydata$weight)
    ## To find the minimum value for age:
    min(mydata$age)
    ## To find the maximum value for age:
    max(mydata$age)
    ## To find what is the 3rd Quartile of weight 
    summary(mydata$weight) (and check the fifth row, fourth column)
    ## To find out how many participants
    nrow(mydata)
    end{verbatim}

    end{solution}

    %% exname{find_the_variance_and_minimum}
    %% extype{num}
    %% exsolution{Sexpr{fmt(c=(varsol | minsol | maxsol | sol1 | sol2), 2)}}
    %% exclozetype{num|num|num|num|num}
    %% extol{0.01}



  

Ответ №1:

В упражнении есть три проблемы, которые мешают его правильной работе:

  1. Вычисление 3-го квартиля с print (summary(mydata)[5, 4 ]) дает символьный, а не числовой результат. Таким образом, последующее форматирование и т. Д. В виде числа не работает. Вместо этого используйте summary(mydata$weight)[5] или quantile(mydata$weight, 0.75) .
  2. Этого extype cloze не должно быть num .
  3. Команда fmt(c=(varsol | minsol | maxsol | sol1 | sol2), 2) не выполняет то, что вы хотите сделать. Используйте paste(fmt(solutions, 2), collapse = "|") вместо этого. (Обратите внимание, что для этого важно исправить проблему 1 выше.)

При некоторой дальнейшей оптимизации упражнение выглядит следующим образом:

 <<echo=FALSE, results=hide>>=
id     <- seq(1:220)
age    <- round(runif(220, 18, 60), 2)
weight <- round(runif(220, 45,100), 2)
gender <- sample(c("male", "female"), 220, replace=TRUE)
mydata <- data.frame(cbind(id, gender, age, weight))
mydata$id     <- as.numeric(mydata$id)
mydata$age    <- as.numeric(mydata$age)
mydata$weight <- as.numeric(mydata$weight)
write.csv(mydata, "DataQuiz1.csv", row.names = FALSE, quote = FALSE)
@    

<<echo=FALSE, results=hide, fig=TRUE>>=
varsol  <- var(mydata$weight)
minsol  <- min(mydata$age)
maxsol  <- max(mydata$age)
sol1   <-  summary(mydata$weight)[5]
sol2  <- nrow(mydata)
solutions <- c(varsol, minsol, maxsol, sol1, sol2)
@ 

begin{question}
Using the data provided in url{DataQuiz1.csv} 
begin{answerlist}
item Report the variance of participants' texttt{weight} (rounded up to two decimal places).
item Report what is the texttt{age} of the youngest person (rounded up to two decimal places).
item Report wht is the texttt{age} of the eldest participant (rounded up to two decimal places).
item Indicate what is the 3rd quartile for the variable texttt{weigh}  (rounded up to two places).
item Write down how many participants are included in the texttt{DataQuiz1}.
end{answerlist}
end{question}

begin{solution}
Replicate the analysis in R:
begin{verbatim}
## data
mydata <- read.csv("DataQuiz1.csv")
## To find the variance for weight:
var(mydata$weight)
## To find the minimum value for age:
min(mydata$age)
## To find the maximum value for age:
max(mydata$age)
## To find what is the 3rd Quartile of weight 
summary(mydata$weight)
## To find out how many participants
nrow(mydata)
end{verbatim}
end{solution}

%% exname{find_the_variance_and_minimum}
%% extype{cloze}
%% exsolution{Sexpr{paste(fmt(solutions, 2), collapse = "|")}}
%% exclozetype{num|num|num|num|num}
%% extol{0.01}
  

Комментарии:

1. Это сработало, отлично! Большое спасибо за вашу неоценимую помощь, Ахим!!! И поздравляю с созданием этого бесценного пакета и всех вспомогательных видеоматериалов, которые вы подготовили для начинающих пользователей, таких как я.

2. Добро пожаловать, рад, что это полезно. Пожалуйста, примите мой ответ, нажав на галочку под подсчетом голосов слева. Затем вопрос помечается как разрешенный здесь, в StackOverflow. Спасибо!

3. Дорогой Ахим, еще раз спасибо за ваш любезный ответ и помощь. Во-первых, я пытался повысить ваш ответ, но система помешала мне сделать это, потому что у меня нет необходимой репутации (15 баллов или более). Но благодаря вам я только что заметил, что есть также возможность пометить ответ как принятый. Я сожалею, что не сделал этого раньше. В любом случае, большое спасибо. Афанасиос Моуратидис