0

基本上我想要做的是为我的所有数据自动执行此操作:

plants_A<-plants_sorted[plants_sorted[, 'treatment']== 'A', ]
plants_A1<-plants_A[plants_A[, 'replicate']== '1', ]
lm(weight~time, data = plants_A1)

从“植物”中,我想为所有处理和复制组合制作 lm。

我还设法使用以下方法拆分数据:

plants_treat_repl <- split(plants, paste(plants$treatment, plants$replicate))

但我似乎无法从这个拆分数据中制作 lm。

# sample data
structure(list(treatment = structure(c(1L, 1L, 1L, 1L, 1L, 2L ), .Label = c("A", 
"B", "C", "D"), class = "factor"), replicate = c(1, 2, 3, 4, 5, 1), time = 
structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("6", "8", "10", "12", "14", 
"16"), class = "factor"), weight = c(2, 0, 0, 0, 0.5, 2.6), trtrep = 
structure(c(1L, 5L, 9L, 13L, 17L, 2L), .Label = c("A.1", "B.1", "C.1", "D.1", 
"A.2", "B.2", "C.2", "D.2", "A.3", "B.3", "C.3", "D.3", "A.4", "B.4", "C.4", 
"D.4", "A.5", "B.5", "C.5", "D.5"), class = "factor")), row.names = c(NA, 6L), 
class = "data.frame") 
4

3 回答 3

1

试用lapply功能:

lms <- lapply(split(plants, paste(plants$treatment,plants$replicate)),
function(x)lm(weight~time, data = x))

lms 是list所有可能的 lm 中的一个。

于 2021-03-12T14:19:52.093 回答
1

让我们将其转换为使用内置数据的可重现示例。(请随意在问题中分享可重现的样本数据——dput(your_data[1:10, ])这是一种可重现地分享数据的好方法,请选择适当的子集。)

## split the data by group
mt_split = split(mtcars, mtcars$cyl)

## fit models to each group
mods = lapply(mt_split, lm, formula = mpg ~ wt)

## extract the coefficients from each model
lapply(mods, coef)
# $`4`
# (Intercept)          wt 
#   39.571196   -5.647025 
# 
# $`6`
# (Intercept)          wt 
#   28.408845   -2.780106 
# 
# $`8`
# (Intercept)          wt 
#   23.868029   -2.192438 
于 2021-03-12T14:38:24.300 回答
0

您还没有确切地告诉我们什么不起作用,但是:

plants <- transform(plants, trtrep = interaction(treatment, replicate)
lme4::lmList(weight~time | trtrep, data=plants)

应该管用。您可能会动态定义复制:

lme4::lmList(weight~time | interaction(treatment, replicate), data=plants)
于 2021-03-12T14:05:13.123 回答