了解R中try的行为

时间:2018-10-26 19:48:37

标签: r try-catch

我正在尝试从大量系列中删除季节性因素,并将季节性包装与X13 SEATS配合使用。但是,当我用seas包装try函数时,我得到了非常不同/错误的输出。我需要try来说明X13发生故障的时间。

关于如何继续前进的任何想法?

正确的行为:

test%>% 
  group_by_("WAGES","GEO", param)  %>% 
  nest() %>% 
  mutate(
    sa = map(data, 
             ~ts( .x$sum.VALUE,
                  start = c(year(min(.x$NEW_DATE)), month(min(.x$NEW_DATE))),
                  frequency = 12) %>%
               seas(transform.function = "none", na.action=na.exclude) %>%
               as.tibble() 
             )
  ) %>%
  unnest() %>%
  head()


# A tibble: 6 x 6
  WAGES GEO   TYPE.OF.WORK NEW_DATE   sum.VALUE     x
  <chr> <chr> <chr>        <date>         <dbl> <dbl>
1 B     A     C            1997-01-01     2943. 2943.
2 B     A     C            1997-02-01     2967. 2967.
3 B     A     C            1997-03-01     2918. 2918.
4 B     A     C            1997-04-01     2887. 2887.
5 B     A     C            1997-05-01     2996. 2996.
6 B     A     C            1997-06-01     2952. 2952.

奇怪的行为:

test%>% 
  group_by_("WAGES","GEO", param)  %>% 
  nest() %>% 
  mutate(
    sa = map(data, 
             ~ts( .x$sum.VALUE,
                  start = c(year(min(.x$NEW_DATE)), month(min(.x$NEW_DATE))),
                  frequency = 12) %>%
               try(seas(transform.function = "none", na.action=na.exclude)) %>%
               as.tibble() 
             )
  ) %>%
  unnest() %>%
  head()

# A tibble: 6 x 6
  WAGES GEO   TYPE.OF.WORK NEW_DATE   sum.VALUE     x
  <chr> <chr> <chr>        <date>         <dbl> <dbl>
1 B     A     C            1997-01-01     2943. 2943.
2 B     A     C            1997-02-01     2967. 2967.
3 B     A     C            1997-03-01     2918. 2918.
4 B     A     C            1997-04-01     2887. 2887.
5 B     A     C            1997-05-01     2996. 2996.
6 B     A     C            1997-06-01     2952. 2952.

数据

> dput(test)
structure(list(GEO = c("A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A"), WAGES = c("B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B"), TYPE.OF.WORK = c("C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C"), 
    NEW_DATE = structure(c(9862, 9893, 9921, 9952, 9982, 10013, 
    10043, 10074, 10105, 10135, 10166, 10196, 10227, 10258, 10286, 
    10317, 10347, 10378, 10408, 10439, 10470, 10500, 10531, 10561, 
    10592, 10623, 10651, 10682, 10712, 10743, 10773, 10804, 10835, 
    10865, 10896, 10926, 10957, 10988, 11017, 11048, 11078, 11109, 
    11139, 11170, 11201, 11231, 11262, 11292, 11323, 11354, 11382, 
    11413, 11443, 11474, 11504, 11535, 11566, 11596, 11627, 11657, 
    11688, 11719, 11747, 11778, 11808, 11839, 11869, 11900, 11931, 
    11961, 11992, 12022, 12053, 12084, 12112, 12143, 12173, 12204, 
    12234, 12265, 12296, 12326, 12357, 12387, 12418, 12449, 12478, 
    12509, 12539, 12570, 12600, 12631, 12662, 12692, 12723, 12753, 
    12784, 12815, 12843, 12874, 12904, 12935, 12965, 12996, 13027, 
    13057, 13088, 13118, 13149, 13180, 13208, 13239, 13269, 13300, 
    13330, 13361, 13392, 13422, 13453, 13483, 13514, 13545, 13573, 
    13604, 13634, 13665, 13695, 13726, 13757, 13787, 13818, 13848, 
    13879, 13910, 13939, 13970, 14000, 14031, 14061, 14092, 14123, 
    14153, 14184, 14214, 14245, 14276, 14304, 14335, 14365, 14396, 
    14426, 14457, 14488, 14518, 14549, 14579, 14610, 14641, 14669, 
    14700, 14730, 14761, 14791, 14822, 14853, 14883, 14914, 14944, 
    14975, 15006, 15034, 15065, 15095, 15126, 15156, 15187, 15218, 
    15248, 15279, 15309, 15340, 15371, 15400, 15431, 15461, 15492, 
    15522, 15553, 15584, 15614, 15645, 15675, 15706, 15737, 15765, 
    15796, 15826, 15857, 15887, 15918, 15949, 15979, 16010, 16040, 
    16071, 16102, 16130, 16161, 16191, 16222, 16252, 16283, 16314, 
    16344, 16375, 16405, 16436, 16467, 16495, 16526, 16556, 16587, 
    16617, 16648, 16679, 16709, 16740, 16770, 16801, 16832, 16861, 
    16892, 16922, 16953, 16983, 17014, 17045, 17075, 17106, 17136, 
    17167, 17198, 17226, 17257, 17287, 17318, 17348, 17379, 17410, 
    17440, 17471, 17501, 17532, 17563, 17591, 17622, 17652, 17683, 
    17713, 17744), class = "Date"), sum.VALUE = c(2942.79, 2966.87, 
    2917.65, 2886.7, 2996.36, 2951.9, 2886.96, 2875.52, 2891.09, 
    2857.64, 2857.19, 2938.29, 2916.43, 2950.59, 2944.06, 3042.12, 
    3020.7, 3070.28, 3146.64, 3115.46, 3051.2, 3054.67, 3096.26, 
    2998.87, 3107.29, 3138.41, 3117.86, 3161.73, 3149.02, 3177.42, 
    3137.76, 3261.84, 3106.48, 3137.77, 3105.52, 3142.32, 3247.22, 
    3248.63, 3252.82, 3280.65, 3313.76, 3245.07, 3166.89, 3240.5, 
    3242.17, 3295.03, 3308.48, 3371.51, 3365.83, 3411.71, 3417.11, 
    3427.45, 3460.72, 3475.9, 3490.49, 3458, 3532.22, 3570.26, 
    3541.26, 3612.36, 3459.7, 3523.97, 3571.65, 3640.84, 3615.73, 
    3654.52, 3629.03, 3687.52, 3757.01, 3723.74, 3724.37, 3701.46, 
    3780, 3794.06, 3848.25, 3777.4, 3763.98, 3822.27, 3728.23, 
    3721.93, 3810.86, 3866.44, 3768.33, 3732.14, 3763.74, 3728.01, 
    3759.04, 3818.27, 3901.36, 3974.64, 3822.89, 3900.47, 3877.12, 
    3941.25, 3992.6, 3890.61, 4070.44, 3991.31, 4057.15, 4042.89, 
    4081.62, 4124.09, 4100.03, 4104.25, 4152.81, 4184.22, 4191.78, 
    4335.11, 4428.65, 4453.45, 4459.03, 4407.08, 4435.67, 4425.71, 
    4430.47, 4509.67, 4517.91, 4515.04, 4643.59, 4717.82, 4662.64, 
    4649.25, 4600.51, 4675.07, 4697.62, 4757.74, 4773.4, 4744.1, 
    4857.38, 4837.44, 4967.31, 5052.1, 5061.4, 4950.29, 4915.1, 
    4923.38, 4960.42, 4887.15, 4937.85, 4963.6, 5116.15, 5114.9, 
    5150.8, 5150.82, 5261.63, 5130.35, 5213.73, 5299.9, 5418.23, 
    5422.04, 5218.62, 5230.13, 5225.52, 5244.1, 5186.85, 5320.53, 
    5468.49, 5364.93, 5306.77, 5371.19, 5424.5, 5390.56, 5374.57, 
    5478.07, 5320.84, 5213.12, 5317.83, 5273.84, 5199.13, 5309.82, 
    5296.64, 5241.29, 5408.55, 5462.32, 5429.53, 5468.51, 5475.63, 
    5467.46, 5628.65, 5629.16, 5579.87, 5658.13, 5548.71, 5614.89, 
    5674.22, 5743.01, 5656.38, 5691.82, 5829.81, 5756.8, 5898.06, 
    5773.46, 5913.27, 5894.29, 5883.03, 5778.02, 5891.21, 5854.83, 
    5869.7, 5873.28, 6144.47, 6067.37, 5965.27, 5958.77, 5994.6, 
    6025.06, 5976.58, 5997.73, 6069.14, 5969.32, 5969.05, 6054.59, 
    6067.95, 6074.01, 6060.74, 6069.58, 6176.02, 6081.7, 6040.36, 
    6138.42, 6185.58, 6165.99, 6297.46, 6150.29, 6264.32, 6374.1, 
    6284.27, 6308.03, 6228.47, 6363.61, 6387.65, 6378.08, 6463.29, 
    6410.47, 6288.4, 6171.26, 6399.54, 6299.71, 6320.09, 6353.56, 
    6247.33, 6204.12, 6399.19, 6087.1, 6326.06, 6322.25, 6377.29, 
    6415.95, 6480.69, 6483.07, 6406.39, 6391.18, 6267.62, 6532.64, 
    6483.3, 6464.72, 6577.79, 6518.49, 6620.3, 6431.73)), row.names = c(NA, 
-260L), vars = c("GEO", "WAGES", "TYPE.OF.WORK"), drop = TRUE, indices = list(
    0:259), group_sizes = 260L, biggest_group_size = 260L, labels = structure(list(
    GEO = "Alberta", WAGES = "Average hourly wage rate", TYPE.OF.WORK = "Full-time employees"), class = "data.frame", row.names = c(NA, 
-1L), vars = c("GEO", "WAGES", "TYPE.OF.WORK"), drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))

2 个答案:

答案 0 :(得分:0)

一种选择是使用safelypossibly来包装seas函数

posSea <- possibly(seas, otherwise = NA)
out <- test%>% 
            group_by_("WAGES","GEO", param)  %>% 
            nest() %>% 
            mutate(
              sa = map(data, 
             ~ts( .x$sum.VALUE,
                  start = c(year(min(.x$NEW_DATE)), month(min(.x$NEW_DATE))),
                  frequency = 12) %>%
                  posSea(transform.function = "none", na.action=na.exclude)%>%
               as.tibble() 
             )
  ) %>%
  unnest() %>%
  head()

答案 1 :(得分:0)

我发现了为什么代码不起作用。

try的行为正确-从某种意义上说,我的代码没有因错误而崩溃-但seas包中的seasonal根据成功还是失败产生了不同的输出。因此,as.tibble仅强制公共列,在我的情况下,仅返回一个列。