2016-09-15 100 views
0

下面的代碼是一個示例。我的功能testf單獨撥打NAMESRC時可以正常工作,但如果我嘗試通過矢量來完成此操作,則不起作用 - 我相信這是有道理的。所以我冒昧地讓它成爲一個循環,並通過權利(從我的理解)這應該工作,但它沒有。它會產生一個輸出,但它顯然是錯誤的,我不確定它爲什麼這樣做。我是否錯誤地應用了這個?由於For循環輸出錯誤答案

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

爲了能夠傳遞了一個字符串testf並將它傳遞給group_by,你必須使用standard evaluation version,這是group_by_

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)) 
} 

在這裏看到一個解釋在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()) 
}