R 中线性模型的 purrr:类型 'character' 的 'envir' 参数无效
purrr with linear model in R: invalid 'envir' argument of type 'character'
我有一个包含不同丰度的物种的数据框,我想看看它们的丰度是否与某些参数相关。
我想我应该能够做类似
的事情
# 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)
令我惊讶的是,我收到以下错误消息。
Error in eval(predvars, data, env): invalid 'envir' argument of type
'character' Traceback:
- duneJ %>% group_by("Species") %>% map(my_lm)
- withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
- eval(quote(`_fseq`(`_lhs`)), env, env)
- eval(quote(`_fseq`(`_lhs`)), env, env)
- `_fseq`(`_lhs`)
- freduce(value, `_function_list`)
- withVisible(function_list[k])
- function_list[k]
- map(., my_lm)
- .f(.x[[i]], ...)
- lm(Count ~ Moisture, data = df) # at line 2 of file
- eval(mf, parent.frame())
- eval(mf, parent.frame())
- stats::model.frame(formula = Count ~ Moisture, data = df, drop.unused.levels = TRUE)
- model.frame.default(formula = Count ~ Moisture, data = df, drop.unused.levels = TRUE)
- eval(predvars, data, env)
显然,我在这里遗漏了一些东西。有人可以澄清一下吗?谢谢
查看此 post http://omaymas.github.io/Climate_Change_ExpAnalysis/, and this video https://www.youtube.com/watch?v=rz3_FDVt9eg 有助于我了解如何最好地同时使用 purrr 和 broom。正如 G. Grothendeik 指出的那样,我可以将包含模型的列添加到数据框(其中每个单元格都是一个完整模型)。使用地图功能的方法是
duneJ %>% group_by(Species) %>% nest %>% mutate(Mod = map(data, my_lm0)) -> test
这里,nest
是一个关键函数,它使一个列成为数据框列表,每个数据框都包含关于每个物种的数据,并将其保存到名为"data"的默认列中.我 运行 map
在 mutate 函数中将模型保存到另一列,其中每个单元格都是一个新模型。
如果我想查看模型结果,我可以将它们组合成带有地图和扫帚的数据框列表,select 相关数据,然后 unnest
它们,如下所示:
test %>% mutate(Glance = map(Mod, glance)) %>% select(Species, Glance) %>% unnest
这为我提供了一个新的数据框架,其中包含每个物种的模型结果,这是我最终的目标,即使我没有在问题中完全解释这一点。
我有一个包含不同丰度的物种的数据框,我想看看它们的丰度是否与某些参数相关。
我想我应该能够做类似
的事情# 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)
令我惊讶的是,我收到以下错误消息。
Error in eval(predvars, data, env): invalid 'envir' argument of type 'character' Traceback:
- duneJ %>% group_by("Species") %>% map(my_lm)
- withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
- eval(quote(`_fseq`(`_lhs`)), env, env)
- eval(quote(`_fseq`(`_lhs`)), env, env)
- `_fseq`(`_lhs`)
- freduce(value, `_function_list`)
- withVisible(function_list[k])
- function_list[k]
- map(., my_lm)
- .f(.x[[i]], ...)
- lm(Count ~ Moisture, data = df) # at line 2 of file
- eval(mf, parent.frame())
- eval(mf, parent.frame())
- stats::model.frame(formula = Count ~ Moisture, data = df, drop.unused.levels = TRUE)
- model.frame.default(formula = Count ~ Moisture, data = df, drop.unused.levels = TRUE)
- eval(predvars, data, env)
显然,我在这里遗漏了一些东西。有人可以澄清一下吗?谢谢
查看此 post http://omaymas.github.io/Climate_Change_ExpAnalysis/, and this video https://www.youtube.com/watch?v=rz3_FDVt9eg 有助于我了解如何最好地同时使用 purrr 和 broom。正如 G. Grothendeik 指出的那样,我可以将包含模型的列添加到数据框(其中每个单元格都是一个完整模型)。使用地图功能的方法是
duneJ %>% group_by(Species) %>% nest %>% mutate(Mod = map(data, my_lm0)) -> test
这里,nest
是一个关键函数,它使一个列成为数据框列表,每个数据框都包含关于每个物种的数据,并将其保存到名为"data"的默认列中.我 运行 map
在 mutate 函数中将模型保存到另一列,其中每个单元格都是一个新模型。
如果我想查看模型结果,我可以将它们组合成带有地图和扫帚的数据框列表,select 相关数据,然后 unnest
它们,如下所示:
test %>% mutate(Glance = map(Mod, glance)) %>% select(Species, Glance) %>% unnest
这为我提供了一个新的数据框架,其中包含每个物种的模型结果,这是我最终的目标,即使我没有在问题中完全解释这一点。