Как я могу вывести процессы внутри функции в текстовый файл на R (приемник не работает, когда операции выполняются незаметно)?
Я пытаюсь написать функцию, которая выполняет несколько ступенчатых регрессий и выводит "шаги" каждого из них в текстовый файл. Проблема, с которой я столкнулся, заключается в том, что sink() на самом деле ничего не выводит, поскольку ни одна из операций в функции не отображается в консоли R.
Изменить: Проблема на самом деле, кажется, возникает в первой части моей функции. Файл "model_log.txt" даже не создается, поэтому что-то подсказывает мне, что приемник вообще не будет работать внутри функции.
Это моя функция до сих пор:
stepModel <- function(formula, family = binomial, data, outfile = NULL) {
if (is.null(outfile) == FALSE){
sink(file = file.path(getwd(),"Reports/model_log.txt"),
append = TRUE, type = "output")
print("")
print("Models run at: ")
print(Sys.time())
}
model.initial <- glm(formula, family = family, data = data)
summary(model.initial)
model.stepwise1 <- step(model.initial, direction = "backward")
summary(model.stepwise1)
model.stepwise2 <- step(model.stepwise1, scope = ~.^2)
summary(model.stepwise2)
if (is.null(outfile) == FALSE) sink()
output <- list(modInitial = model.initial, modStep1 = model.stepwise1, modStep2 = model.stepwise2)
return(output)
}
Я использую следующий фрейм данных для проверки своих результатов (не говоря уже о том, что ступенчатая регрессия удаляет все, кроме перехвата, этого достаточно, чтобы вы повторили мои результаты):
test.df <- data.frame(a = sample(0:1, 100, rep = T),
b = as.factor(sample(0:5, 100, rep = T)),
c = runif(100, 0, 100),
d = rnorm(100, 50, 50))
test.mdl <- stepModel(a~., family = binomial, data = test.df, outfile = file.path(getwd(), "test_log.txt"))
Я хочу, чтобы эта функция отправляла все эти шаги в любой файл, указанный в опции outfile. Есть идеи?
1 ответ
Сделал ошибку в части, которая говорит:
sink(file = file.path(getwd(),"Reports/model_log.txt"),
append = TRUE, type = "output")
это должно сказать:
sink(file = outfile,
append = TRUE, type = "output")