Привет! Я хочу проверить, существует ли столбец в 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)
Редактирование с немного большим контекстом: в этом примере причина этого в том, что пользователь может вводить данные, которые являются специфическими для сайта и поэтому не имеют столбца сайта (т.е. у них есть data.frame с данными только в одном сайт, поэтому они никогда не указывали сайт в виде столбца) или они могли использовать data.frame, в котором были данные о количестве сайтов, указанных в столбце. Поэтому, если столбец «Сайт» отсутствует, можно с уверенностью предположить, что данные относятся к одному сайту, и он действителен для продолжения вычислений, но если столбец сайта существует, я должен проверить, что он имеет только одно отдельное значение (например, возможно, был отфильтрован). в этом столбце перед применением функции применяется через plyr::ddply
).
Однако во многих других случаях я хочу проверить, что мои входные данные для функции имеют ожидаемую форму, и если входные данные представляют собой data.frame, это часто означает проверку имен столбцов и что-то в этом столбце