在R中使用变量获取lmList()

3

我有一些数据,以data.table的形式读取。它看起来可能是这样的:

d <- data.table(TYPE = c('A', 'A', 'A', 'B', 'B', 'C', 'C'),
                CLASS = c(1, 2, 3, 1, 4, 2, 1),
                NUM = c(48, 23, 32, 56, 75, 45, 76))

如果我运行fits <- lmList(NUM ~ TYPE | CLASS, data = d),它会运行,但是如果我尝试将列名存储到变量中(以减少硬编码),并像这样运行它:
Y <- 'NUM'
X <- 'TYPE'
grp <- 'CLASS'
fits <- lmList(Y ~ X | grp, data = d)

我得到了这个错误:
Warning messages:
1: In storage.mode(v) <- "double" : NAs introduced by coercion
2: In lmList(Y ~ X | grp, data = d) :
  Fitting failed for 1 group(s), probably because a factor only had one level:
  contrasts can be applied only to factors with 2 or more levels

我也尝试了 fits <- lmList(as.name(Y) ~ as.name(X) | as.name(grp), data = d),但是出现了以下错误:

Error in model.frame.default(formula = as.name(Y) ~ as.name(X) + as.name(grp),  : 
  object is not a matrix

我尝试的另一件事是:

fits <- lmList(eval(paste(Y ~ X | grp, data = d)))

这导致:
Error in UseMethod("lmList") : 
  no applicable method for 'lmList' applied to an object of class "character"

我在这里做错了什么?欢迎任何帮助或建议。谢谢!

更新
这里有一个链接,用于参考lmList


lmList 是从哪里来的?请注意,公式不是由字符串组成的。如果您需要从字符串中制作公式,请使用 reformulate() - MrFlick
lmList is from the library(lme4) - Bear
无论是lme4还是nlme,都可以加载它。nlme会掩盖lme4 - Bear
使用 fits <- reformulate(lmList(Y ~ X | grp, data = d)) 会产生以下错误信息: Error in reformulate(lmList(Y ~ X | grp, data = d)) : 'termlabels' 必须是至少长度为一的字符向量 此外:警告信息如下: 1: In storage.mode(v) <- "double" : NAs introduced by coercion 2: 1 error caught in contrasts<-(tmp, value = contr.funs[1 + isOF[nn]]): contrasts can be applied only to factors with 2 or more levels - Bear
此外,fits <- as.formula(lmList(Y ~ X | grp, data = d))导致以下警告信息: 1:在storage.mode(v) <-“double”中:强制转换引入了NAs 2:在contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])中捕获到1个错误:对具有2个或多个水平的因子才能应用对比。 - Bear
1个回答

0

我知道这已经晚了,但我刚遇到了这个问题。 我为未来的搜索者回答这个问题。 你必须将公式视为paste()中的文本字符串。 尝试:

fits <- lmList(as.formula(paste(Y, " ~ ", X, " | grp")), data = d)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接