2017-12-23 11 views
0

私は異なる種のデータフレームを持っており、それらの存在量がいくつかのパラメータに関連しているかどうかを見たいと思っています。purrr in linear model R:タイプ 'character'の 'envir'引数が無効

私は私が驚いたことに

# 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、データ、ENV):

  1. duneJ%>%GROUP_BY( "種")%>%マップ:タイプ '文字' トレースバックの無効 'ENVIR' 引数(my_lm)
  2. withVisible(evalの(引用符( `_fseq`(` _lhs`))、ENV、ENV))
  3. のeval(引用符( `_fseq`(` _lhs`))、ENV、ENV)
  4. eval( `_fseq`(` _lhs`))、env、env)
  5. ` _fseq`( `_lhs`)
  6. freduce(値、` _function_list`)
  7. withVisible(function_list [K])
  8. function_list [K]
  9. マップ(。、my_lm)
  10. .F( .X [[I]]、...)
  11. LM(ファイルの2行目
  12. のeval(MF、parent.frame(時〜水分、データ= DF)#をカウント))
  13. のeval(MF 、parent.frame())
  14. stats :: model.fra私
  15. model.frame.default(式=カウント〜モイスチャー、データ=のDF、drop.unused.levels = TRUE)
  16. (数式は=〜モイスチャー、データ=のDF、drop.unused.levels = TRUEをカウント) evalの(predvars、データ、ENV)

は明らかに、私はここで何かが欠けています。誰か明確にしてもらえますか?ありがとう。

+0

データフレームが必要です。 'duneJ%>%group_by(種)%>%summarize(lm = list(my_lm(。)))' –

+0

をお試しください。それが本当に実行されている間、私は出力と何をすべきか分からない。私は係数とp値のデータフレームを得るために 'duneJ%>%group_by( 'Species')%>%map(my_lm)%>%broom :: tidy'のようなことを行う予定でした。 – ohnoplus

+0

私はマップのポイントの多くは、データフレームではないオブジェクトを扱うことができたと考えていました。最後に、map_df(broom :: tidy)のようなものでデータフレームを抽出することができました – ohnoplus

答えて

0

このポストhttp://omaymas.github.io/Climate_Change_ExpAnalysis/とこのビデオhttps://www.youtube.com/watch?v=rz3_FDVt9egを見て、どうやってパーマと箒を一緒に使うのかを理解する助けになりました。 G. Grothendeikが指摘しているように、データフレームにモデル付きの列を追加できます(各セルはフルモデルです)。マップ機能でこれを行う方法は

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

nestそれぞれの種についてのデータが含まれ、それぞれが、データフレームのリストで列を作る重要な機能であるとし、それを保存していますデフォルトの列は "data"です。私はmapをmutate funcitonの中で実行して、モデルをさらに別の列に保存します。ここで各セルは新しいモデルです。

私はモデルの結果を見たい場合は、私はそうのように、それらを、マップやほうきでデータフレームのリストにそれらを組み合わせて、関連するデータを選択し、unnestことができます。

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

これが取得します私は、たとえ私がその質問で完全に説明していなくても、私が最終的に目指していた、各種のためのモデル結果を持つ新しいデータフレームです。