R函数的行为与逐行输入的代码不同

时间:2018-06-12 22:57:22

标签: r function

我不知所措。谷歌搜索让我失望,因为我不确定我是否知道正确的问题。

我有一个数据框(df1),我的目标是使用一个函数来使用forecast :: ma获得移动平均线。

这是str(df1)

'data.frame':   934334 obs. of  6 variables:
 $ clname  : chr   ...
 $ dos     : Date, format: "2011-10-05" ...
 $ subpCode: chr  
 $ ch1     : chr  "
 $ prov    : chr  
 $ ledger  : chr  

我有一个我想写的功能。

process <- function(df, y, sub, ...) {


 prog <-   df %>%

    filter(subpCode == sub) %>%

    group_by(dos, subpCode) %>%

    summarise(services = n())

 prog$count_ts <- ts(prog[ , c('services')])


}

问题在于,当我运行该函数时,我的最终结果是1x1798的数据对象,它只是一个时间序列。如果我逐行运行代码,我会得到我需要的东西,但我的功能假设同样的东西不会工作。

这是我想要的结果

Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 1718 obs. of  4 variables:
 $ dos     : Date, format: "2010-09-21" "2010-11-18" "2010-11-19" "2010-11-30" ...
 $ subpCode: chr  "CII  " "CII  " "CII  " "CII  " ...
 $ services: int  1 1 2 2 2 2 1 2 1 3 ...
 $ count_ts: Time-Series [1:1718, 1] from 1 to 1718: 1 1 2 2 2 2 1 2 1 3 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr "services"
 - attr(*, "vars")= chr "dos"
 - attr(*, "drop")= logi TRU

以下是获取它的代码。

CII <-   df1 %>%
  filter(subpCode == "CII  ") %>%
  group_by(dos, subpCode) %>%
  summarise(services = n())

CII$count_ts <- ts(CII[ , c('services')])

有人能指出我正确的方向吗?我已经筋疲力竭了。

谢谢!

1 个答案:

答案 0 :(得分:0)

在@CalumYou指出的小插图之后,你应该使用更多这样的东西:

process <- function(df, sub) {
   ## Enquoting sub
   sub <- enquo(sub)

   ## Piping stuff
   prog <-   df %>%
      filter(!! subpCode == sub) %>%
      group_by(dos, subpCode) %>%
      summarise(services = n())

   prog$count_ts <- ts(prog[ , c('services')])

   ## Returning the prog object
   return(prog)
}