【发布时间】:2019-04-23 01:14:10
【问题描述】:
您好,我想检查 data.frame 中的列是否存在,并且仅当它确实检查其他条件时。
我知道我可以使用示例中的嵌套 if 语句。
这通常用于检查函数的输入。这是一个工作示例,它为我提供了我想要的输出,我只是想知道是否有更聪明的方法,因为这可能会变得混乱,特别是如果我在多种情况下这样做。我的例子:
testfun <- function(dat,...){
library(dplyr)
if("Site" %in% colnames(dat)){
#for example check number of sites, this condition could be anything though
if(n_distinct(dat$Site) > 1) stop ("Function must have site specific data")
}
#do stuff
return(1)
}
testdf1 <- data.frame(x = 1:10, y = 1:10)
testdf2 <- data.frame(x = 1:10, y = 1:10,Site = "A")
testdf3 <- data.frame(x = 1:10, y = 1:10,Site = rep(c("A","B"),each = 5))
testfun(testdf1)
testfun(testdf2)
testfun(testdf3)
使用更多上下文进行编辑:对于此示例,原因是用户可能输入特定于站点的数据,因此没有 Site 列(即,他们有一个 data.frame,其中只有一个数据站点,因此他们从未将站点指定为列),或者他们可能正在使用一个 data.frame,其中包含列中指定的多个站点的数据。因此,如果没有站点列,可以安全地假设数据是针对一个站点的,并且它可以继续计算,但是如果有一个站点列,我必须检查它是否只有一个不同的值(例如,可能已被过滤在应用通过plyr::ddply 应用的功能之前在此列上。
还有很多其他情况,但是我想检查我对函数的输入数据是否符合预期的形式,如果输入是 data.frame 这通常意味着检查列名和有关该列的内容
【问题讨论】:
标签: r validation if-statement