Я пишу функцию, которая выполняет t-тест на фреймворке данных, подмножая данные в соответствии с аргументами, которые я определил. Вот рабочий пример с использованием данных mtcars:Как отрицать аргумент подмножества
testfunc <- function(dfrm, varq, factor, gear = FALSE,
am = FALSE, carb = FALSE){
# Subset the data according to the arguments:
subsetdfrm <- dfrm[which((dfrm[,"gear"] %in% gear) &
(dfrm[,"am"] %in% am) &
(dfrm[,"carb"] %in% carb)),]
# Grab the groups to be compared according to arguments:
factorbinary <- get(factor)
# The t-test:
t <- t.test(dfrm[which(dfrm[factor]==factorbinary[1]), varq],
dfrm[which(dfrm[factor]==factorbinary[2]), varq],
data = subsetdfrm)
print(t)
}
Здесь функция в действии, сравнивая автомобили с 3-х передач против автомобилей с 4-мя передачами, глядя на автоматический (Am = 0) автомобили с 2 до 4 карбюраторов:
testfunc(mtcars, "mpg", "gear", gear = c(3,4), am = 0, carb = c(2:4))
Обратите внимание, что я определил значения по умолчанию для аргументов как «FALSE». Я хочу найти значение по умолчанию для этих аргументов, которое автоматически отрицает подмножество, что означает, что все значения включены. Мое лучшее решение было добавить, если() положения для каждого из аргументов в начале функции как таковой:
if(carb == FALSE){gear <- unique(dfrm$gear)}
if(am == FALSE){am <- unique(dfrm$am)}
if(carb == FALSE){carb <- unique(dfrm$carb)}
Это будет трудно управлять, как только число параметров увеличивается. Есть ли значение по умолчанию, на которое я могу установить свои аргументы, что приведет к отрицанию подмножества?
Я представляю что-то, что эквивалентно противоположному объекту NULL: «не-NULL» или подстановочный объект, который просто равен всем. Если нет, могу ли я изменить свой код, чтобы использовать объект NULL на этапе подмножества?
Ищет ключевые слова «все», «любые» и «подмножество», как правило, ссылаются на страницы, ссылающиеся на функции all() и any(), и не получили меня дальше. Буду признателен за любую помощь, спасибо.
Если у вас есть вектор индексов строк (например, 'which' возвращает), вы можете отменить их с помощью' -', выбрав дополнение. См. Https://cran.r-project.org/doc/manuals/R-intro.html – Frank
О, я вижу, вы имеете в виду * не * подмножество. Для этого вы можете просто написать 'gear = unique (dfrm $ gear)' внутри 'function (...)' part. Благодаря ленивой оценке R, он будет оценивать этот термин только тогда, когда он необходим внутри функции. – Frank
Какой модуль мы ищем? Это очень длинная страница, возможно, я могу использовать ctrl-F для ключевого слова, которое приведет меня в раздел, на который вы ссылаетесь? – naco