r - 确定函数返回值是否为 dplyr 对象

标签 r dplyr dbplyr

我正在使用source加载其他R文件。使用 do.call,我从该 R 文件调用特定函数,并向其传递参数。我想在尝试调用 write.csv 之前检查从函数返回的东西是否实际上是 dplyr 对象。

我尝试对结果使用typeof,但看起来我只是返回了list。我可以使用类似于 is.data.frame 的东西吗?如果可以的话,我最终会调用 stop ,但在这种情况下最好提供更好的错误消息,而不是任何 write.csv > 吐出来。

例如,给定这个 R 脚本,是否有办法判断返回的对象是否是 dplyr 对象?

library(dplyr)

dm_usa <- function(dm, caseSensitive) {
    if (caseSensitive) {
        dplyr::filter(dm, COUNTRY == "USA")
    } else {
        dplyr::filter(dm, tolower(COUNTRY) == "usa")
    }
}

dm 参数是通过以下方式构造的:dplyr::tbl(connection, tableName),并在后台使用 dbplyr。

最佳答案

我建议保持简单:inherits(ret, "data.frame")

虽然dplyr和 friend 们经常宣传“tbl_df”,但他们仍然可以使用并返回data.table和vanilla data.frame 无需重新分类(取决于操作)。因为它们都是真正的多类:

class(tibble::tibble(mtcars))
# [1] "tbl_df"     "tbl"        "data.frame"
class(data.table::data.table(mtcars))
# [1] "data.table" "data.frame"
class(mtcars)
# [1] "data.frame"

使用inherits允许选择任何可用的类字符串,并且“data.frame”将匹配所有三个。 (这与 class(obj) == "..." 的反模式相反,因为只有当 object 是单类对象时才有效,其中上面三个中的两个将无法按预期工作。)

关于r - 确定函数返回值是否为 dplyr 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73888949/

相关文章:

r - r中数据框的名称

r - 当变量的拼写方式略有不同时,如何对变量进行计数?

r - 使用 dplyr 对多列求和

r - R中的SQLite中的表中的Collect()

r - 如何在 dbplyr 中使用 R 代码创建自定义 SQL 函数?

sql - 为什么我的日期字段从 SQL 数据库作为 double 返回到 R 中

r - 聚合输出不可用

r - 如何在 R 中 reshape 复杂的数据框?

r - 在 dplyr 中使用多个条件进行过滤

r - 如何使用 dplyr 内的函数或表达式对 dplyr 内的公式调用创建的 t.test 模型的属性进行变异?