我尝试将函数参数传递给tidyr::example (版本tidyr_0.6),如下面的示例所示。我的函数参数是一个字符串(变量名)。我收到错误消息。有人知道为什么吗?如何修改我的代码以使其正常工作?
# data
stocks <- data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
stocksm <- stocks %>% gather(stock, price, -time)
#function
spread.data <- function (var){
var = sym(var)
stocksm %>% spread(stock, !!var)
}
spread.data('price')我收到错误消息。
Error: Invalid column specification发布于 2017-09-10 14:02:00
我认为@Z.lin的评论可能是正确的。下面是一个使用rlang::sym函数的可重复使用的示例。注意:完全不使用sym函数也可以获得相同的结果。我使用tidyr_0.7.0得到以下结果:
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(rlang))
# data
stocks <- data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
stocksm <- stocks %>% gather(stock, price, -time)
# with rlang::sym function
spread.data <- function (var){
var = sym(var)
stocksm %>% spread(stock, !!var)
}
result1 <- spread.data('price')
# without sym function
spread.data <- function (var){
stocksm %>% spread(stock, !!var)
}
result2 <- spread.data('price')
identical(result1, result2)
#> [1] TRUEhttps://stackoverflow.com/questions/46137382
复制相似问题