Reputation: 25
I am trying to set up a simple exercise for moodle with the aid of the exams package. It seems that I miss something and the file that I import to Moodle does not include all the items that are supposed to be included. The code appears below. I would appreciate any hint that could help me resolve this problem. The code is as follows:
<<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}
Upvotes: 1
Views: 142
Reputation: 17183
There are three issues with the exercise that prevent it from working correctly:
print (summary(mydata)[5, 4 ])
yields a character and not a numeric output. Subsequent formatting etc. as a number does thus not work. Instead use summary(mydata$weight)[5]
or quantile(mydata$weight, 0.75)
.extype
needs to be cloze
not num
.fmt(c=(varsol | minsol | maxsol | sol1 | sol2), 2)
does not do what you want to do. Use paste(fmt(solutions, 2), collapse = "|")
instead. (Note that it is important to have fixed issue 1 above for that.)With some further streamlining the exercise then looks like this:
<<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}
Upvotes: 0