2016-09-15 104 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()) 
}