#r #r-exams
Вопрос:
Я пытаюсь создать тест на холсте, в котором студентам предлагается оценить эффективное сопротивление различных цепей. Схемы содержат от 2 до 4 резисторов со значениями, выбранными из серии E12. Чтобы ответить на этот вопрос, студенты демонстрируют, что они понимают параллельные и последовательные соединения между резисторами.
Для любой конфигурации одной схемы я могу создать вопрос (вот пример для двух последовательных резисторов).
begin{question}
What is the total resistance between points a and b if $R_1 = Sexpr{r1}$ Sexpr{char1_insert}$Omega$ and $R_2 = Sexpr{r2}$ Sexpr{char2_insert}$Omega$?
setkeys{Gin}{width=0.3textwidth}
<<fig=TRUE, height = 4, width = 4, echo=FALSE, eps=FALSE, results=hide>>=
plot.new()
rasterImage(im, 0, 0, 1, xmax)
@
end{question}
begin{solution}
Resistors in series should be added. So
begin{eqnarray*}
R_{tot} amp; = amp; R_1 R_2\
R_{tot} amp; = amp; Sexpr{r1_val} Sexpr{r2_val}\
R_{tot} amp; = amp; Sexpr{res}~Omega
end{eqnarray*}
end{solution}
но я не могу понять, как рандомизировать выбор типа вопроса. Например, если сценарий случайным образом выбирает между двумя последовательно включенными резисторами или тремя последовательно включенными резисторами, то следующее не работает
begin{question}
What is the total resistance between points a and b given the following:
<<>>=
if (sel==1)
{
@
$R_1 = Sexpr{r1}$ Sexpr{char1_insert}$Omega$, and $R_2 = Sexpr{r2}$ Sexpr{char2_insert}$Omega$, arranged as shown in the schematic
<<>>=
} else if (sel == 2)
{
@
$R_1 = Sexpr{r1}$ Sexpr{char1_insert}$Omega$, $R_2 = Sexpr{r2}$ Sexpr{char2_insert}$Omega$, and $R_3 = Sexpr{r3}$ Sexpr{char3_insert}$Omega$ arranged as shown in the schematic
<<fig=TRUE, height = 4, width = 4, echo=FALSE, eps=FALSE, results=hide>>=
plot.new()
rasterImage(im, 0, 0, 1, xmax)
@
end{question}
#similar code for solution
Что я отчасти понимаю, потому что операторы if прерываются, и переводчик задыхается от этого (я думаю). Но есть ли способ сделать это?
Ответ №1:
Да, вы правы, что упражнение таким образом синтаксически неверно и, следовательно, не может быть обработано правильно.
Что вам нужно сделать, так это вставить ваши переменные R ( r1
char1_insert1
, и т.д.) В строку вопроса в R (например, с помощью paste()
или sprintf()
), а затем вставить всю строку в {question}
использование Sexpr{}
.
Я проиллюстрирую это ниже, используя sprintf()
, где %s
находится заполнитель для строк, которые должны быть вставлены. Это заменяет Sexpr{}
вставки из вашей оригинальной версии.
qu <- if(sel == 1) {
sprintf("$R_1 = %s$ %s$Omega$, and $R_2 = %s$ %s$Omega$",
r1, char1_insert, r2, char2_insert)
} else {
sprintf("$R_1 = %s$ %s$Omega$, $R_2 = %s$ %s$Omega$, and $R_3 = %s$ %s$Omega$",
r1, char1_insert, r2, char2_insert, r3, char3_insert)
}
В результате получается символьная строка qu
, содержащая текст вопроса. Затем это может быть включено в {question}
via:
What is the total resistance between points a and b if Sexpr{qu},
arranged as shown in the schematic
Комментарии:
1. Ах, да. Я пробовал несколько версий построения строк, но не sprintf(). Я попробовал вставить(). Когда результат был передан на консоль, форматирование оказалось правильным. Но когда я вызвал exams2[выбор формата] в файле, полученная строка вообще не была обработана.
2. ОК. Итак, вы решили проблему сейчас? Если это так, пожалуйста, примите ответ, нажав на галочку слева. Если что-то все еще неясно, пожалуйста, возобновите вопрос.
3. Хм, я мог бы поклясться, что поставил галочку.