R中带有线性模型的purrr:'character'类型的无效'envir'参数

时间:2017-12-23 01:16:22

标签: r purrr

我有一个具有不同丰度的物种数据框,我想知道它们的丰度是否与某些参数有关。

我认为我应该能够做一些像

这样的事情
# Load in the dune data set and tidyverse
library(vegan)
data(dune)
data(dune.env)
library(tidyverse)

# Reshape the species matrix into long form data
duneM <- dune %>% rownames_to_column('Site') %>% gather(Species, Count, -Site)

# Join the species and environmental data
duneE <- dune.env %>% rownames_to_column('Site')
duneJ <- left_join(duneM, duneE, by = 'Site')

# Basic linear model, that compares species counts to moisture data
my_lm <- function(df){
    lm(Count ~ Moisture, data = df)
}

# Group the data by species and apply the function to each one
duneJ %>% group_by('Species') %>% map(my_lm)

令我惊讶的是,我收到以下错误消息。

  

eval中的错误(predvars,data,env):类型的'envir'参数无效   'character'Trackback:

     
      
  1. duneJ%&gt;%group_by(“Species”)%&gt;%map(my_lm)
  2.   
  3. withVisible(eval(quote(`_fseq`(`_lhs`)),env,env))
  4.   
  5. eval(quote(`_fseq`(`_lhs`)),env,env)
  6.   
  7. eval(quote(`_fseq`(`_lhs`)),env,env)
  8.   
  9. `_fseq`(`_lhs`)
  10.   
  11. freduce(value,`_ function_list`)
  12.   
  13. withVisible(function_list [K])
  14.   
  15. function_list [K]
  16.   
  17. map(。,my_lm)
  18.   
  19. .f(.x [[i]],...)
  20.   
  21. lm(Count~M含,data = df)#在文件第2行
  22.   
  23. eval(mf,parent.frame())
  24.   
  25. eval(mf,parent.frame())
  26.   
  27. stats :: model.frame(formula = Count~M含,data = df,drop.unused.levels = TRUE)
  28.   
  29. model.frame.default(formula = Count~M含,data = df,drop.unused.levels = TRUE)
  30.   
  31. eval(predvars,data,env)
  32.   
显然,我在这里遗漏了一些东西。有人可以澄清一下吗?感谢。

1 个答案:

答案 0 :(得分:0)

它帮助我查看了这篇文章http://omaymas.github.io/Climate_Change_ExpAnalysis/,以及此视频https://www.youtube.com/watch?v=rz3_FDVt9eg,了解如何最好地使用purrr和扫帚。正如G. Grothendeik指出的那样,我可以在数据框中添加一个带有模型的列(每个单元格都是完整的模型)。使用map函数执行此操作的方法是

 duneJ %>% group_by(Species) %>% nest %>% mutate(Mod = map(data, my_lm0)) -> test

此处,nest是一个关键函数,它使列成为数据框列表,每个数据框都包含有关每个物种的数据并将其保存到名为“data”的默认列中。我在mutate函数内部运行map以将模型保存到另一列,其中每个单元格都是新模型。

如果我想查看模型结果,我可以将它们组合成一个包含地图和扫帚的数据框列表,选择相关数据,然后unnest它们,如下所示:

 test %>% mutate(Glance = map(Mod, glance)) %>% select(Species, Glance) %>% unnest

这为我提供了一个新的数据框架,其中包含每个物种的模型结果,这是我最终的目标,即使我没有在问题中完全解释这一点。