我正在尝试使用lm()
命令生成severate dlply
。
dlply()
将DF
子集设为两个变量:“SITE”和“SP”。对于每个组合,我想计算线性模型,并通过summary()
将斜率和系数保存在列表中。
线性模型是根据数值“IA”和因子“YEAR”计算的。我的问题来自YEAR可能有一个值取决于子集的事实,导致错误:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels
所以我试图添加一个if / else命令来忽略YEAR只有一个值的子集,并且仅当lm()
不同于1时才计算length(YEAR)
。
但我的命令并没有摆脱错误。我的命令有什么问题?
这是我的代码:
q<-dlply(SUBTOT, .(SITE, SP),function(x){
if (length(x$YEAR)==1){m<-NULL
print(m)}
else{m <-lm(IA ~ YEAR, x)
summary(m)}
})
感谢您的帮助。
编辑:这是十个第一个“x”组合的“年”级别数。
q<-dlply(SUBTOT, .(SITE, SP),function(x){
length(unique(x$YEAR))})
> q[1:10]
[1] 5
[1] 7
[1] 6
[1] 7
[1] 6
[1] 1
[1] 1
[1] 1
[1] 8
[1] 3
答案 0 :(得分:1)
这样的事情有用吗?
dlply(SUBTOT, .(SITE, SP), function(x) ifelse(nrow(x) > 1, summary(lm(IA ~ YEAR, x)), ""))