2017-07-03 13 views
1

周波数表を作成するためにR関数を作成しようとしていますので、繰り返し入力しなくても書式などを標準化できます。唯一の問題は、グループ化変数を正しく評価することができないということです。ここで期待どおりに変数を評価していない関数

は、問題を再現するために、ミニデータセットを取得するためのいくつかのコードです:

になり
library(tidyverse) 
id <- sample(1:500, 5) 
factors <- sample(1:3, 5, replace = TRUE) 
data <- data.frame(id, factors) 
freqTable <- function(x, field){ 

    Table <- x %>% 
     group_by(field) %>% 
     summarise(N = n(), Percent = n()/NROW(x)*100) %>% 
     mutate(C.Percent = cumsum(Percent)) 
    return(Table) 
} 
freqTable(data, "factors") 

resolve_varsでエラーが発生しました(new_groups、tbl_vars(.dataセクション)):不明 グループ化する変数:フィールドからの呼び出し:resolve_vars(new_groups、 tbl_vars(.data))

また、試してみました:

(それは誤りないことに)少し良く動作しますが、それでもこれは出力し、正しくない、実際にグループの要因を行い
freqTable <- function(x, field){ 
    Table <- x %>% 
      group_by(paste(field)) %>% 
      summarise(N = n(), Percent = n()/NROW(x)*100) %>% 
      mutate(C.Percent = cumsum(Percent)) 
    return(Table) 
} 

# A tibble: 1 × 4 
    `paste(field)`  N Percent C.Percent 
      <chr> <int> <dbl>  <dbl> 
1  factors  5  100  100 

はそれだけで伝えるところ私はその列の症例の数です。誰が私がここで間違っているのか知っていますか?

+1

チェックアウト "dplyrビネットを使用したプログラミング":https://cran.r-project.org/web/packages/dplyr /vignettes/programming.html – sinQueso

答えて

1

申し訳ありません - この1つを考え出しました。

group_by_(field)

私はそれが非標準の評価とは何かを持っているかもしれないと思ったが、私はまだそれについてあまり精通していませんよ。

この:

freqTable <- function(x, field){ 
+  Table <- x %>% 
+    group_by_(paste(field)) %>% 
+    summarise(N = n(), Percent = n()/NROW(x)*100) %>% 
+    mutate(C.Percent = cumsum(Percent)) 
+ return(Table) 
+ } 

は今、このを与える:

> freqTable(data, "factors") 
# A tibble: 2 × 4 
    factors  N Percent C.Percent 
    <int> <int> <dbl>  <dbl> 
1  2  2  40  40 
2  3  3  60  100 
+0

「貼り付け」でどのように動作するのか、どうでしたか? 'as.character'ではありません –

+1

エラーメッセージから、変数名を値として評価していると思われ、貼り付けをすれば必要なスペースに値を出力するかもしれないと考えました。 – Nick

+0

それはクールなトリックだ、私はそれが入力として静的な名前を取る、集計のような他の関数で動作するのだろうか。誰かが何が起こっているのか説明できるなら、私は喜んでいるだろう! –

関連する問題