r - effects::effect 无法识别 purrr::map 中的数据
问题描述
考虑这样的数据集:
library(lme4)
data(sleepstudy)
head(sleepstudy, 10)
Reaction Days Subject
1 249.5600 0 308
2 258.7047 1 308
3 250.8006 2 308
4 321.4398 3 308
5 356.8519 4 308
6 414.6901 5 308
7 382.2038 6 308
8 290.1486 7 308
9 430.5853 8 308
10 466.3535 9 308
在基于分组变量进行分层时,我正在尝试运行一些混合效应线性模型。我可以:
library(dplyr)
libary(tidyr)
library(purrr)
sleepstudy %>%
group_by(grp = gl(2, n()/2)) %>%
nest() %>%
mutate(fit = map(data, ~ lmer(Reaction ~ Days + (Days | Subject), data = .)))
获得:
grp data fit
<fct> <list<df[,3]>> <list>
1 1 [90 × 3] <lmrMdLmT>
2 2 [90 × 3] <lmrMdLmT>
现在我想使用库中的effect()
函数effects
:
library(effects)
sleepstudy %>%
group_by(grp = gl(2, n()/2)) %>%
nest() %>%
mutate(fit = map(data, ~ effect(term = "Days",
mod = lmer(Reaction ~ Days + (Days | Subject), data = .))))
但是,我总是遇到错误:
Error in is.data.frame(data) : object '.' not found
tidyverse
当我在上下文之外使用它时:
sleepstudy2 <- sleepstudy %>%
mutate(grp = gl(2, n()/2))
effect(term = "Days", mod = lmer(Reaction ~ Days + (Days | Subject),
data = sleepstudy2,
subset = grp == 1))
然后它可以正常工作:
Days effect
Days
0 2 4 7 9
252.2916 267.0686 281.8455 304.0110 318.7880
知道如何解决这个问题并使用整洁的方法来解决吗?
解决方案
因此,effects()
当您使用的数据不在全局环境中时,该功能似乎存在真正的问题。?effects
它在帮助页面的“警告和限制”部分中引用。他们指出了包装中的“嵌入”小插图,以car
寻求可能的解决方法。他们建议的解决方法是在全球环境中制作数据数据的副本。它并不优雅,但这有效
poo <- sleepstudy %>%
group_by(grp = gl(2, n()/2)) %>%
nest() %>%
mutate(fit = map(data, function(x) {
assign(".dta", x, env=.GlobalEnv)
eff <- effect(term="Days", mod=lmer(Reaction ~ Days + (Days | Subject), data=.dta))
remove(".dta", envir=.GlobalEnv)
eff
}))
推荐阅读
- excel - 使用 VBA 为图形着色
- java - 如何在存在事务的情况下使代码可重用成为可能?
- php - 使用 PHP 的 PDO 无法访问我的数据库
- templates - 如何配置 Serilog 输出模板以仅显示某些属性
- reactjs - 使用去抖动功能时的性能问题警告
- mysql - 删除的 SQL 查询
- java - 我正在尝试在我的 Spring 启动应用程序中使用 AllArgsConstructor,但它没有为所有字段提供默认构造函数?
- python-3.x - 无法在 Windows 上的 virtualenv 中安装 pytorch
- docker - dotnet restore 查找错误的 nuget 源
- java - 我正在尝试将“2019-11-15T18:30:00Z”格式的字符串转换为日期格式。我也附上了代码