For循环输出错误答案
问题描述:
下面的代码是一个示例。我的功能testf
单独拨打NAME
或SRC
时可以正常工作,但如果我尝试通过矢量来完成此操作,则不起作用 - 我相信这是有道理的。所以我冒昧地让它成为一个循环,并通过权利(从我的理解)这应该工作,但它没有。它会产生一个输出,但它显然是错误的,我不确定它为什么这样做。我是否错误地应用了这个?由于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)
}
答
为了能够传递了一个字符串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
答
尝试使用这样的:
testf <- function(j) {
Example %>% group_by((deparse(j))) %>% summarize(Count=n())
}
完美的谢谢你,这让我明白为什么我在for循环中没有改变就是修复它 – Visser