#r
Вопрос:
Я искал и пробовал несколько ранее заданных вопросов, которые могли бы быть похожи на мой вопрос, но ни один из них не сработал.
У меня есть фрейм данных в R под названием df2, столбец под названием df2$col. Я создал функцию, которая принимает df, df$col и два параметра, которые являются именами для двух новых столбцов, которые я хочу создать и обработать в функции. После завершения работы функции я хочу получить возвращаемый df с включенными двумя новыми столбцами. Я действительно возвращаю два столбца, но они названы в честь заполнителей в оболочке функции. Смотреть ниже:
df2 = data.frame(col = c(1, 3, 4, 5),
col1 = c(9, 6, 8, 3),
col2 = c(8, 2, 8, 4))
созданная мной функция возьмет col и что-то с ним сделает; вернет преобразованный col, а также два вновь созданных столбца:
no_way <- function(df, df_col_name, df_col_flagH, df_col_flagL) {
lo_perc <- 2
hi_perc <- 6
df$df_col_flagH <- as.factor(ifelse(df_col_name<lo_perc, 1, 0))
df$df_col_flagL <- as.factor(ifelse(df_col_name>hi_perc, 1, 0))
df_col_name <- df_col_name 1.4
df_col_name <- df_col_name * .12
return(df)
}
Когда я вызываю функцию no_way(df2, col, df$new_col, df$new_col2), вместо того, чтобы получить df с col, col1, col2, new_col1, new_col2, я правильно получаю первые три, но получаю параметрические имена для последних двух. Итак, что-то вроде df, col, col1, col2, df_col_flagH, df_col_flagL. По сути, я хочу, чтобы функция возвращала df с именами новых столбцов, которые я даю ей при вызове. Пожалуйста, помогите.
Комментарии:
1. Используйте
[[
вместо$
. Вы (и каждый пользователь R) должны учитьсяhelp("$")
не реже одного раза в год и чаще, если вы новичок.2. @Roland Я действительно пробовал это раньше, но получил сообщение об ошибке: «попытка выбрать менее одного элемента в OneIndex «. Я просто попробовал еще раз и получил то же самое сообщение.
3. Вам также необходимо изменить способ вызова своей функции. Я (или кто-то другой) показал бы вам в ответе, но я не понимаю, чего должны достичь эти две
df_col_name <- ...
строки.
Ответ №1:
Я не понимаю, что пытается сделать ваша функция, но это может указать вам правильное направление:
no_way <- function(df = df2, df_col_name = "col", df_col_flagH = "col1", df_col_flagL = "col2") {
lo_perc <- 2
hi_perc <- 6
df[[df_col_flagH]] <- as.factor(ifelse(df[[df_col_name]] < lo_perc, 1, 0)) # as.factor?
df[[df_col_flagL]] <- as.factor(ifelse(df[[df_col_name]] > hi_perc, 1, 0))
df[[df_col_name]] <- (df[[df_col_name]] 1.4) * 0.12 # Do in one step
return(df)
}
Ответ №2:
Вместо этого мне нужно было вызвать функцию с новыми именами столбцов в виде строк:
no_way(mball, 'TEAM_BATTING_H', 'hi_TBH', 'lo_TBH')
Кроме того, мне пришлось использовать скобки вокруг целевого столбца в моей функции.