uribo / zipangu

Japanese utility functions and data
https://uribo.github.io/zipangu
Other
56 stars 7 forks source link

`convert_jdate()` を `legacy = TRUE` で使う事ができません #55

Closed Hirototensho closed 1 year ago

Hirototensho commented 1 year ago

 はじめまして、いつも有り難く使わせていただいています。tidyverse のアップデート以降 convert_jdate()legacy = TRUE とすと次のようなエラーメッセージが出るようになってしまっています。

library(zipangu)
convert_jdate("令和4年2月24日")
#> [1] "2022-02-24"

# 西暦の年月日だとうまく変換できません 
convert_jdate("2023年2月24日")
#> [1] "4041-02-24"

# 以前はこの方法で正しく変換することができました
convert_jdate("2023年2月24日", legacy = TRUE)
#> Error in `purrr::map()`:
#> ℹ In index: 1.
#> Caused by error in `purrr::map()`:
#> ℹ In index: 1.
#> Caused by error in `map_vec()`:
#> ! Can't convert `<list>[[1]]` <double> to <character>.

convert_jdate("令和4年2月24日", legacy = TRUE)
#> Error in `purrr::map()`:
#> ℹ In index: 1.
#> Caused by error in `purrr::map()`:
#> ℹ In index: 1.
#> Caused by error in `map_vec()`:
#> ! Can't convert `<list>[[1]]` <double> to <character>.
Hirototensho commented 1 year ago

 お世話になっております。私の方で調べてみたところ、 convert-jyear-legacy.R にある split_ymd_elements () の定義で、convert_jyear_impl1() の戻り値を purrr::modify_at() を通して文字ベクトルへ代入する際にエラーが出ているようです。Tidyverse: purrr 1.0.0 Tidyverse consistencyに記載のある型変換ルールの変更が原因ではないかと思います。素人考えですが convert-jyear-legacy.R の80行目で使用されている purrr::modify_at()as.character() を追加していただくと上手くいくのではないかと思います。

split_ymd_elements <- function(x) {
  x %>%
    purrr::map(
      function(.x) {
        if (is.na(.x)) {
          NA_real_
        } else {
          .x %>%
            stringi::stri_trans_general(id = "nfkc") %>%
            stringr::str_split("(\u5e74|\u6708|\u65e5)|(\\.)|(\\-)|(\\/)",
                               simplify = TRUE) %>%
            purrr::keep(~ nchar(.) > 0) %>%
            # 代入先の型に合わせるため、as.character() を追加
            purrr::modify_at(1,
                             ~ as.character(convert_jyear_impl1(.x))) %>% 
            purrr::map(as.integer) %>%
            purrr::set_names(c("year", "month", "day"))
        }
      }
      ) %>%
    purrr::flatten()
}
uribo commented 1 year ago

@Hirototensho ご報告ありがとうございます。該当箇所の修正を行いました!