首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数参数传递给tidyr::spread

将函数参数传递给tidyr::spread
EN

Stack Overflow用户
提问于 2017-09-10 12:45:26
回答 1查看 108关注 0票数 0

我尝试将函数参数传递给tidyr::example (版本tidyr_0.6),如下面的示例所示。我的函数参数是一个字符串(变量名)。我收到错误消息。有人知道为什么吗?如何修改我的代码以使其正常工作?

代码语言:javascript
复制
# 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')

我收到错误消息。

代码语言:javascript
复制
Error: Invalid column specification
EN

回答 1

Stack Overflow用户

发布于 2017-09-10 14:02:00

我认为@Z.lin的评论可能是正确的。下面是一个使用rlang::sym函数的可重复使用的示例。注意:完全不使用sym函数也可以获得相同的结果。我使用tidyr_0.7.0得到以下结果:

代码语言:javascript
复制
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] TRUE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46137382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档