2016-09-15 4 views
0

以下のコードは例です。私の関数testfは、NAMEまたはSRCを個別に呼び出すときにうまく動作しますが、これをベクターを介して実行しようとすると機能しません。だから私はそれをループにして、権利によって(私が理解しているところから)これはうまくいくはずだが、それはない。それは出力を生成しますが、それは明らかに間違っています、なぜ私はこれをやっているのか分かりません。これを間違って適用していますか?ループが間違った答えを出力するため

testf <- function(j) { 
    Example %>% group_by_(.dots = j) %>% summarize(Count=n()) 
} 

# examples: 
testf("NAME") 
testf(c("NAME", "AIR")) 

for (v in c("NAME", "SRC")) { 
    print(testf(v)) 
} 

説明についてはこちらをご覧ください:ありがとう

NAME <- c("SYNOP", "SYNOP", "METAR", "METAR", "SYNOP", "METAR") 
AIR <- c(6.7, 8.3, 9.2, 8.9, 9.1, 8.7) 
SRC <- c("WMO", "WMO", "WMO", "ID_3", "ID_3", "WMO") 
Example <- data.frame(NAME, AIR, SRC) 

require(dplyr) 
testf <- function(j) { 
Example %>% group_by((j)) %>% summarize(Count=n()) 
} 

testf(NAME) 
testf(SRC) 

vector <- c("NAME", "SRC") 

testf(vector) 

for (v in vector) { 
testg <- testf(v) 
print(testg) 
    } 

答えて

2

あなたはgroup_by_あるstandard evaluation version、使用する必要があるだろう、testfに文字列を渡すと、それはgroup_byに渡さ持つことができるようにするにはdplyrパッケージに使用される非標準の評価:https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html

+0

パーフェクトありがとう、これは私がforループで変更したものがなぜそれを修正したのか理解できない – Visser

0

これを使用してみてください:

testf <- function(j) { 
    Example %>% group_by((deparse(j))) %>% summarize(Count=n()) 
} 
関連する問題