Мутация не ведет себя должным образом внутри пользовательских функций (вариант) - PullRequest
1 голос
/ 13 октября 2019

Мой вопрос похож на вопрос Ариэля Полани и Тайлера Лоу, но в моем случае решение !!sym() или !! в пределах mutate() не работает. Вот мой код:

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)

1 Ответ

1 голос
/ 13 октября 2019

Если мы используем assignment в строке, используйте := и здесь нам не нужен sym

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

-полный код

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
...