Search code examples
rtidyversefunction-call

Mutate not behaving as expected inside custom functions (variation)


My question is similar to Ariel Polani's and Tyler Law's, but in my case the !!sym() solution or the !! solution within mutate() does not work. Here is my code:

library(cansim)
library(tidyverse)
add_series <- function(vector_num,first_date,end_date,tseries) {
  tmp <- get_cansim_vector(vector_num,first_date,end_date)
  tseries <- mutate(tseries,!!sym(vector_num)=tmp$VALUE)
  return(tseries)
}
first_date <- as.Date("2011-01-01",format="%Y-%m-%d")
end_date <- as.Date("2019-06-01",format="%Y-%m-%d")
tseries <- data.frame(REF_DATE=seq(first_date,end_date,by="month"))
tseries <- add_series("v42170711",first_date,end_date,tseries)

Solution

  • If we are using assignment on string, use the := and here we don't need sym

    library(dplyr)
    tseries <- tseries %>%
                     mutate(!!vector_num :=tmp$VALUE)
    

    -full code

    add_series <- function(vector_num,first_date,end_date,tseries) {
      tmp <- get_cansim_vector(vector_num,first_date,end_date)
      tseries %>%
           mutate(!! vector_num :=tmp$VALUE)
    
    }
    
    add_series("v42170711",first_date,end_date,tseries) %>%
         head
    #    REF_DATE v42170711
    #1 2011-01-01   1566882
    #2 2011-02-01   1580492
    #3 2011-03-01   1566209
    #4 2011-04-01   1594096
    #5 2011-05-01   1600677
    #6 2011-06-01   1613907