Есть ли способ заставить мои функции кода работать с несколькими переменными вместо той, с которой я сейчас работаю? - PullRequest
0 голосов
/ 05 мая 2020
• 1000 поворачиваться дольше. Я практикуюсь в использовании факторов, поэтому стараюсь сохранить все, что делаю, в рамках функции. У меня есть код, который позволяет построить график, используя только HB (см. Ниже). Но я бы хотел заставить этот код работать для всех 4 переменных, которые есть в моем наборе данных, просто используя функции. Может ли кто-нибудь помочь мне с этим?
slopegraph_prep <- function(health_longer, HB){health %>%
  select(NAME:SEX, starts_with("HB")) %>%
  pivot_longer(cols = starts_with("HB"),
               names_to = "Year",
               names_prefix = "HB",
               values_to = "HB") %>%
  mutate(
    HB = case_when(
      HB < 0        ~ "NA",
      TRUE ~ as.character(HB) 
    )
  )  %>%
  na_if("NA") %>% 
  mutate(HB = as.numeric(HB)) %>%

  mutate(
    Year = case_when(
      Year=="12" ~ "2012",
      Year=="14" ~ "2014",
      Year=="19" ~ "2019")
  )
}



slopegraph_by_sex <- function(health, HB, SEX){ Subsetdata <- subset(health, SEX == SEX)
newggslopegraph(Subsetdata , Year , HB, NAME,
                Title = "Haemoglobin", 
                SubTitle = SEX, 
                Caption = NULL,
                RemoveMissing = FALSE)
 }

df_healthmeas <- slopegraph_prep(health, "HB")


df_healthmeas_female <- slopegraph_by_sex(df_healthmeas, "Haemoglobin", "female")

df_healthmeas_male <- slopegraph_by_sex(df_healthmeas, "Haemoglobin", "male")

Что я действительно хочу сделать, так это просто иметь возможность запустить это, например, и чтобы оно работало, но я чувствую, что мне нужно сделать мои переменные более универсальными c?:

   df_healthmeas <- slopegraph_prep(health, "WAZ")
    df_healthmeas_female <- slopegraph_by_sex(df_healthmeas, "Weight to Age WAZ", "female") 
df_healthmeas_male <- slopegraph_by_sex(df_healthmeas, "Weight to Age WAZ", "male")

Любая помощь с этим будет принята с благодарностью

1 Ответ

1 голос
/ 05 мая 2020

Эй, это уже можно сделать с помощью вашего кода, вам только нужно указать аргумент функции:

df_healthmeas <- slopegraph_prep(health_longer = health, HB =WAZ)

переменные, которые вы указали в коде функции, являются всего лишь «фиктивными», поэтому вы можете переписать это для лучшей читабельности как таковой:

slopegraph_prep <- function(data, var){data %>%
  select(NAME:SEX, starts_with("var")) %>%
  pivot_longer(cols = starts_with("var"),
               names_to = "Year",
               names_prefix = "var",
               values_to = "var") %>%
  mutate(
    var = case_when(
      var < 0        ~ "NA",
      TRUE ~ as.character(var) 
    )
  )  %>%
  na_if("NA") %>% 
  mutate(var = as.numeric(var)) %>%

  mutate(
    Year = case_when(
      Year=="12" ~ "2012",
      Year=="14" ~ "2014",
      Year=="19" ~ "2019")
  )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...