1

我正在尝试根据适合真实数据集的 logit 模型的结果开发考试。我尝试加载数据集,拟合模型,并使用r varname语法包含从模型中提取的一些变量。

我首先使用练习中生成的人工数据开发了一个小示例。效果很好,这是相应的 Rmd 文件:

```{r data generation, echo = FALSE, results = "hide"}    
library(tidyverse)
d <- tibble(y = rbinom(100, 1, 0.6), x1 = rnorm(100), x2=rnorm(100))

# randomize exams
nsize <- sample(50:150, 1)
sampled_dat <- sample(1:nrow(d), nsize, replace = TRUE)
fd <- d[sampled_dat, ]

fmodel <- glm(y ~ x1 + x2, data = fd, family = binomial("logit"))
```

Question
========    
`r nrow(fd)`

```{r}
summary(fmodel)
```
    
Choose the correct answer. 

Answerlist
----------
* sol1  `r nrow(fd)`
* sol2
    
Meta-information
================
exname: bdvDeviance
extype: schoice
exsolution: 10
exshuffle: TRUE
```

这在启动时按预期工作

elearn_exam <- c("ess3.Rmd")
set.seed(1234567)
exams2nops(elearn_exam, n = 2, language = "en",
           institution = "U", title = "Exam",
           dir = "nops_pdf", name = "BDV", date = "2018-01-08", duplex = FALSE)

然而,这是加载真实数据集的类似练习:

```{r data generation, echo = FALSE, results = "hide"}    
load("d.Rdata")
# randomize exams
nsize <- sample(180:250, 1)
sampled_dat <- sample(1:nrow(d), nsize, replace = TRUE)
fd <- d[sampled_dat, ]

logitModel <- glm(Adopted ~ CultArea + Trained + LabRice+ Education + ExtContact, data = fd, family=binomial("logit"))    
```

Question
========    
`r nrow(fd)`

Choose the correct answer.

Answerlist
----------
* When adding  variables, the deviance did not change. The variables did not bring some useful information. 
* sol2 `r nrow(fd)`

Meta-information
================
exname: bdvDeviance
extype: schoice
exsolution: 10
exshuffle: TRUE
```

这一次,我收到以下错误:

> elearn_exam <- c("ess4.Rmd")
> set.seed(1234567)
> exams2nops(elearn_exam, n = 2, language = "en",
+            institution = "Uu", title = "Exam",
+            dir = "nops_pdf", name = "BDV_R", date = "2018-01-08", duplex = FALSE)
Quitting from lines 14-35 (ess4.Rmd) 
Error in nrow(fd) : object 'fd' not found

我不明白第二种情况的问题是什么。显然,将fd变量包含在r fd. 问题不是来自回归,因为在编织 Rmd 文件时效果很好。

4

1 回答 1

1

您使用真实数据集的第二个示例只是通过加载相应的数据文件load("d.Rdata"),假设它位于当前工作目录中。但是,当使用任何exams2xyz()界面时,练习会在一个临时目录中处理,以免弄乱用户的工作空间。因此,d.Rdata在该目录中找不到该文件,因此无法加载。并且由于这个问题,fd无法创建和插入对象。简而言之,r fd代码工作正常,问题在于加载数据。

为避免此问题,您必须指定数据文件的完整绝对路径,load("/path/to/d.Rdata")或者您需要在加载数据之前将数据复制到临时目录。对于后者,有将include_supplement()补充文件复制到临时目录的便利功能。默认情况下,它会从练习所在的目录中获取它们。因此您只需添加:

include_supplement("d.Rdata")

在加载数据文件之前。请注意,当文件不在练习目录本身而是在某个子目录中时,您可以添加参数recursive = TRUE。然后递归搜索子目录。

于 2020-06-30T11:20:59.823 回答