gpt4 book ai didi

r - 检查使用整洁评估的函数中列的类

转载 作者:行者123 更新时间:2023-12-02 14:48:56 27 4
gpt4 key购买 nike

我没有将列名作为字符串引用,但是当我没有将列名作为字符串引用时,如何检查 if 语句中的类:

我的问题是下面的 if 语句:我试过 rlang::as_namequote 等。

df <- tibble::tibble( time_text = as.character(as.POSIXct("2018-02-03 08:00:00", tz = "UTC") + rnorm(100, 0, 60*60*60)))

date_from_text <- function(df, x){

if(!class(df[[deparse(x)]]) %in% c("POSIXct", "POSIXt" )) {

x <- rlang::enquo(x)
name <- rlang::quo_name(x)

out <- df %>%
dplyr::mutate(!!name := lubridate::ymd_hms(!!x))
}
else {
stop("Seems that column is in the right format already")
}
}

date_from_text(df, time_text)
Error in deparse(x) : object 'time_text' not found

最佳答案

当您使用 x <- rlang::enquo(x) 时它会起作用和 name <- rlang::quo_name(x)if 之前-声明:

date_from_text <- function(df, x){

x <- rlang::enquo(x)
name <- rlang::quo_name(x)

if(!inherits(df[[name]], c("POSIXct", "POSIXt"))) {

out <- dplyr::mutate(df, !!name := lubridate::ymd_hms(!!x))

} else {

stop("Seems that column is in the right format already")

}
}

我更改了 if 中的要求-声明!inherits(df[[name]], c("POSIXct", "POSIXt")) .
在您的原始代码中,只会检查类向量的第一个元素,而 inherits 检查是否继承了任何指定的类。

my.df <- tibble::tibble(time_text = as.character(as.POSIXct("2018-02-03 08:00:00", tz = "UTC") + rnorm(100, 0, 60*60*60)))

my.df2 <- date_from_text(my.df, time_text)
my.df2
# A tibble: 100 x 1
# time_text
# <dttm>
# 1 2018-02-06 18:38:46
# 2 2018-01-31 16:16:15
# 3 2018-02-04 05:52:32
# 4 2018-02-05 23:31:50
# 5 2018-02-06 13:00:34
# 6 2018-02-01 16:16:24
# 7 2018-02-05 15:09:45
# 8 2018-02-04 04:23:00
# 9 2018-02-03 06:55:18
# 10 2018-01-29 01:06:26
# ... with 90 more rows

date_from_text(my.df2, time_text)

Error in date_from_text(my.df2, time_text) : Seems that column is in the right format already

感谢@KonradRudolph 用他的评论改进了这个答案。

关于r - 检查使用整洁评估的函数中列的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56987401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com