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



我正在使用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和朋友们倾向于经常宣传"tbl_df",但他们仍然可以使用并返回data.table和普通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) == "..."的反模式形成对比,因为只有当对象是单个类对象时,这种模式才有效,而上述三个对象中的两个将无法按要求工作。(

相关内容

最新更新