R:dlply,function(x)和if命令

时间:2014-06-18 13:13:00

标签: r

我正在尝试使用lm()命令生成severate dlplydlply()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

1 个答案:

答案 0 :(得分:1)

这样的事情有用吗?

dlply(SUBTOT, .(SITE, SP), function(x) ifelse(nrow(x) > 1, summary(lm(IA ~ YEAR, x)), ""))