A.Функциональный подход
Вернуть df
и затем присвоить его новому фрейму данных или перезаписать существующий:
add_row <- function(df) {
df[nrow(df) + 1, 1:ncol(df)] <- NA
df
}
data <- add_row(data)
# or
data2 <- add_row(data)
B.На месте
1.Имя пароля и окружение
Вы можете перезаписать его изнутри функции, но это не тот функциональный стиль, который обычно используется с R, который подчеркивает обработку без побочных эффектов.
add_row_name <- function(df, envir = parent.frame()) {
dfx <- envir[[df]]
dfx[nrow(dfx) + 1, 1:ncol(dfx)] <- NA
envir[[df]] <- dfx
invisible(dfx)
}
add_row_name("data")
2.Передайте формулу
или укажите имя, используя формулу:
add_row_fo <- function(formula, envir = environment(formula)) {
add_row_name(all.vars(formula), envir)
}
add_row_fo(~ data)
3.Нестандартная оценка
Другая возможность заключается в использовании нестандартной оценки:
add_row_ns <- function(df, envir = parent.frame()) {
nm <- deparse(substitute(df))
dfx <- envir[[nm]]
dfx[nrow(dfx) + 1, 1:ncol(dfx)] <- NA
envir[[nm]] <- dfx
invisible(dfx)
}
add_row_ns(data)
C.rbind
Выше мы основали код на этом вопросе, но учтите, что
rbind(data, NA)
будет достаточно, чтобы добавить строку NA, если вы присвоите ее обратно data
или новомуимя, поэтому, возможно, вам не нужно add_row
во-первых.
Обновление
Исправлено.Добавлены дополнительные альтернативы.