Как присвоить имя выходному глобальному фрейму данных в функции? - PullRequest
0 голосов
/ 03 января 2019

У меня есть около 12 наборов данных, которые я пытаюсь очистить, прежде чем использовать их в качестве окончательного кода в моем конечном коде.В настоящее время у меня есть код, который работает для отдельных наборов данных, но я хочу реализовать его как функцию, чтобы мне не приходилось повторно набирать блоки кода снова и снова.

countyshapesClean <- function(inputdata, outputdata) {
  outputdata <<- inputdata %>%
select(
  county_cl,
  state_abb,
  avg_opioid,
  avg_oxy_hydro,
  avg_opioid_perc,
  avg_oxy_hydro_perc,
  avg_opioid_ppp,
  avg_oxy_hydro_ppp
) %>% 
mutate(
  avg_opioid = format(round(as.numeric(avg_opioid),2), nsmall = 2, big.mark = ","),
  avg_oxy_hydro = format(round(as.numeric(avg_oxy_hydro),2), nsmall = 2, big.mark = ","),
  avg_opioid_perc = format(round(as.numeric(avg_opioid_perc),2), nsmall = 2, big.mark = ","),
  avg_oxy_hydro_perc = format(round(as.numeric(avg_oxy_hydro_perc),2), nsmall = 2, big.mark = ","),
  avg_opioid_ppp = format(round(as.numeric(avg_opioid_ppp),2), nsmall = 2, big.mark = ","),
  avg_oxy_hydro_ppp = format(round(as.numeric(avg_oxy_hydro_ppp),2), nsmall = 2, big.mark = ",")
)
}

countyshapesClean(inputdata = countymerge2006, outputdata = countymerge2006clean)

Это работает, но мой выходной набор данных называется outputdata вместо countymerge2006clean.Как бы я изменил этот код, чтобы получить желаемый результат?

1 Ответ

0 голосов
/ 03 января 2019

Не передавайте outputdata функции. Вместо этого сделайте что-то вроде

countymerge2006clean <- countyshapesClean(inputdata = countymerge2006)

где ваша функция возвращает обновленный data.frame.

countyshapesClean <- function(inputdata) {
  inputdata %>%
  select(...) %>% 
  mutate(...)
}

Правильные функции в R не должны создавать переменные вне своей области видимости. (Не рекомендуется использовать <<-).

Конечно, почти все возможно, это R, и вы можете создавать переменные вне области функции с помощью функции assign() (хотя я настоятельно рекомендую вам НЕ делать этого). Это будет выглядеть примерно так

countyshapesClean <- function(inputdata, outputdata) {
  outvar <- rlang::ensym(outputdata)
  new <- inputdata %>%
    select(...) %>% 
    mutate(...)
  assign(rlang::quo_name(outvar), new, parent.frame())
}
countyshapesClean(inputdata = countymerge2006, outputdata = countymerge2006clean)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...