R 效果的功能与xlevels一起失效

R 效果的功能与xlevels一起失效,r,R,我正在用R中的effects包开发一个函数。我经常遇到一个无法调试的问题 我运行以下代码: rm(list = ls()) # clear working directory library(effects) head(mtcars) mod <- lm(mpg ~ gear*cyl + gear + cyl + carb, data=mtcars) summary(mod) eff.dat <- effect("gear*cyl", mod=mod, KR=TRUE, xle

我正在用R中的
effects
包开发一个函数。我经常遇到一个无法调试的问题

我运行以下代码:

rm(list = ls())  # clear working directory
library(effects)

head(mtcars)
mod <- lm(mpg ~ gear*cyl + gear + cyl + carb, data=mtcars)
summary(mod)

eff.dat <- effect("gear*cyl", mod=mod, KR=TRUE, xlevels=list(gear=seq(3,5,1)))
eff.dat <- as.data.frame(eff.dat)
View(eff.dat)
xlevels
部件出现故障,交互项是针对
档位
的默认值估计的,而不是我指定的值。显然,这是一个更大的函数的一部分,否则我就不会为
effect
单独编写一些东西


谢谢你的帮助

首先举例说明发生了什么:

foo <- function(x) {
  list(x = x)
}

foo("bar")
#$x
#[1] "bar 

此外,您应该避免使用
创建函数副作用。为什么您要创建一个没有返回值但依赖副作用的函数?此外,使用
设置名称(列表(seq(min(mtcars[[main]])、max(mtcars[[main]])、1))、main)
。您的代码使用
“main”
作为列表元素的名称。谢谢,这很有效!如果你把它写下来作为一个答案,我很乐意接受。但是,我不太明白为什么我需要
setNames
。在有效的代码中,实际上
main
也被用作列表元素(
gear
)的名称,这似乎是
xlevels
所需要的,不是吗?
foo <- function(x) {
  list(x = x)
}

foo("bar")
#$x
#[1] "bar 
foo <- function(x) {
  setNames(list(x), x)
}

foo("bar")
#$bar
#[1] "bar"
proba <- function(term, model, main) {
  as.data.frame(
    effect(term, mod=model, KR=TRUE,
           xlevels= setNames(list(seq(min(mtcars[[main]]),
                                      max(mtcars[[main]]), 1)), main))
  )
}

eff.dat2 <- proba("gear*cyl", model=mod, main="gear")
all.equal(eff.dat, eff.dat2)
#[1] TRUE