Во-первых, я не думаю, что пайпинг ваших данных в compareGroups
имеет смысл - помните, что пайпинг означает, что первый аргумент compareGroups()
теперь является фреймом данных, даже если спецификация функции:
compareGroups(formula, data, ...)
Во-вторых, эта виньетка dplyr показывает, что вы можете использовать .data
вместо .
для доступа к переданным данным.Тем не менее, в этом случае следующее вызовет сбой, выдав сообщение data argument will be ignored since formula is already a data set
(из-за данных, переданных в первый аргумент).
get_results <- function(){
get_data() %>% assign_group %>% compareGroups(group ~ ., data = .data) # does NOT work
}
Отдельный вызов compareGroups
без передачи по трубопроводу заставит меняв безобразный беспорядок сред, в которых res
не имеет доступа к данным при запросе res['mpg']
вне функции get_results()
, как вы уже упоминали в проблеме с областью видимости.Я думаю, что это проблема compareGroups
, потому что если я использую ту же архитектуру с glm
, такой проблемы не будет.Поэтому лучшее, что я могу сделать, - это вынуть фрейм данных из функциональной среды, которая, я думаю, не дает правильного ответа на ваш вопрос:
get_data <- function() return(mtcars)
assign_group <- function(df) {
n <- nrow(df)
df$group <- rbinom(n, 1, 0.5)
return(df)
}
df = get_data() %>% assign_group()
res = compareGroups(group ~ ., data = df)
print(res['mpg'])
Но я надеюсь, что первые два замечания, которые я сделал, приблизят вас кответ.