gather_ 不起作用。在标准评估模式下,引用和 ~ing 不应该具有相同的效果吗?
gather_ does not work. Shouldn't quoting and ~ing have the same effect in standard evaluation mode?
我在让 tidyr 的 gather 在其标准评估版 gather_ 中工作时遇到问题:
require(tidyr)
require(dplyr)
require(lazyeval)
df = data.frame(varName=c(1,2))
收集作品:
df %>% gather(variable,value,varName)
但我希望能够在标准评估模式下从变量中获取名称 varName,但似乎无法正确使用:
name='varName'
df %>% gather_("variable","value",interp(~v,v=name))
Error in match(x, y, 0L) : 'match' requires vector arguments
我也对以下内容感到困惑。
这按预期工作:
df %>% gather_("variable","value","varName")
下一行应该等同于最后一行(根据我对 http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html 的理解),但不起作用:
df %>% gather_(~variable,~value,~varName)
Error in match(x, y, 0L) : 'match' requires vector arguments
查看 tidyr:::gather_.data.frame
的源代码,您可以看到它只是 reshape2::melt
的包装器。因此,它仅适用于 character
或 numeric
参数。实际上以下(我认为是错误)有效:
df %>% gather_("variable", "value", 1)
据我所知,nse
小插图仅指 dplyr
而不是 tidyr
。
虽然这个问题已经得到解答,但以下代码可用于定义键和值以在函数中更普遍地收集目的,使用键和值的输入向量:
data <- data.frame(a = runif(10), b = runif(10), c = runif(10))
Key <- "ColId"
Value <- "ColValue"
data %>% gather(key = KeyTmp, value = ValTmp) %>%
rename_(.dots = setNames("KeyTmp", Key) ) %>%
rename_(.dots = setNames("ValTmp", Value) )
我在让 tidyr 的 gather 在其标准评估版 gather_ 中工作时遇到问题:
require(tidyr)
require(dplyr)
require(lazyeval)
df = data.frame(varName=c(1,2))
收集作品:
df %>% gather(variable,value,varName)
但我希望能够在标准评估模式下从变量中获取名称 varName,但似乎无法正确使用:
name='varName'
df %>% gather_("variable","value",interp(~v,v=name))
Error in match(x, y, 0L) : 'match' requires vector arguments
我也对以下内容感到困惑。
这按预期工作:
df %>% gather_("variable","value","varName")
下一行应该等同于最后一行(根据我对 http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html 的理解),但不起作用:
df %>% gather_(~variable,~value,~varName)
Error in match(x, y, 0L) : 'match' requires vector arguments
查看 tidyr:::gather_.data.frame
的源代码,您可以看到它只是 reshape2::melt
的包装器。因此,它仅适用于 character
或 numeric
参数。实际上以下(我认为是错误)有效:
df %>% gather_("variable", "value", 1)
据我所知,nse
小插图仅指 dplyr
而不是 tidyr
。
虽然这个问题已经得到解答,但以下代码可用于定义键和值以在函数中更普遍地收集目的,使用键和值的输入向量:
data <- data.frame(a = runif(10), b = runif(10), c = runif(10))
Key <- "ColId"
Value <- "ColValue"
data %>% gather(key = KeyTmp, value = ValTmp) %>%
rename_(.dots = setNames("KeyTmp", Key) ) %>%
rename_(.dots = setNames("ValTmp", Value) )