【问题标题】:Mutate not behaving as expected inside custom functions (variation)变异在自定义函数中的行为不符合预期(变体)
【发布时间】:2019-10-13 15:52:11
【问题描述】:

我的问题类似于 Ariel Polani 和 Tyler Law 的问题,但在我的情况下,!!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)

【问题讨论】:

    标签: r tidyverse function-call


    【解决方案1】:

    如果我们在字符串上使用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
    

    【讨论】:

    • 感谢您的帮助。它适用于一个系列,但是当我再次尝试第二个系列 v806086 时,它会覆盖。 add_series("v806086",first_date,end_date,tseries) %>% head 为什么会这样?
    • @PhilSmith 因为您没有就地分配。 tseries &lt;- add_series("v42170711",first_date,end_date,tseries)
    猜你喜欢
    • 2019-11-05
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多