#r #function #dataframe #arguments #regression
#r #функция #фрейм данных #аргументы #регрессия
Вопрос:
Я пытаюсь написать функцию в R, которая принимает фрейм данных, создает модель, суммирует его, а затем записывает выходные данные в Excel. Аргументы, передаваемые в функцию, — это имя файла, которое я хочу, чтобы файл Excel имел, и переменные, на основе которых я буду создавать модель.
Вот код, с помощью которого я пытался это сделать:
functionForRunningRegressionWritingExcel <- function(fileName, regressionName, dataFrame, y, xFactor, w, modelType) {
regressionName <- lm(data = dataFrame, dataFrame[,y] ~ factor(dataFrame[, xFactor]) * dataFrame[, w], model = as.character(modelType))
summary(regressionName)
plot(regressionName)
fileName <- tidy(regressionName)
writexl::write_xlsx(fileName, "/Users/otakarkorinek/Documents/SOC/Regression Results/new_regression.xlsx")
ggPredict(change_vs_week_before_stimulus_payments_on_case_rate_change,se=TRUE,interactive=TRUE)
}
Однако по какой-то причине, когда я пытаюсь запустить функцию со следующими аргументами:
functionForRunningRegressionWritingExcel("regression", "change_on_income", Affinity_County_Weekly.csv, "spend_all", "winner2016", w = "case_rate", "within")
Я получаю ошибку:
Error in model.frame.default(formula = dataFrame[, y] ~ factor(dataFrame[, :
invalid type (list) for variable 'dataFrame[, y]'
У вас есть какие-либо идеи, в чем может быть проблема и как ее исправить?
Комментарии:
1. Является
Affinity_County_Weekly.csv
adata.frame
? ЯвляетсяAffinity_County_Weekly.csv[, "winner2016"]
числовым или символьным?
Ответ №1:
Вы можете создать объект формулы, используя переданную строку. Попробуйте использовать эту функцию.
functionForRunningRegressionWritingExcel <- function(fileName, regressionName, dataFrame, y, xFactor, w, modelType) {
regressionName <- lm(data = dataFrame, paste0(y, '~factor(', xFactor, ')*', w), model = modelType)
summary(regressionName)
plot(regressionName)
fileName <- tidy(regressionName)
writexl::write_xlsx(fileName, "/Users/otakarkorinek/Documents/SOC/Regression Results/new_regression.xlsx")
ggPredict(change_vs_week_before_stimulus_payments_on_case_rate_change,se=TRUE,interactive=TRUE)
}
Предполагая, Affinity_County_Weekly.csv
что это имя фрейма данных, вы можете вызвать его как обычно с помощью
functionForRunningRegressionWritingExcel("regression", "change_on_income", Affinity_County_Weekly.csv, "spend_all", "winner2016", w = "case_rate", "within")