Попытка обернуть функцию вокруг моего кода создания тиббла - PullRequest
0 голосов
/ 08 января 2019

Код без функции-переноса делает то, что требуется, но возвращает NULL, когда я обертываю функцию вокруг него

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

Но когда я иду, чтобы поместить его в функцию, возвращается NULL

# This works
for.gas <- tibble(Year = (start-1):(start+h-1))
for(i in countries){
  test.df           <- tibble(Year = (start-1):(start+h-1),
                              n    = NA
  )
  colnames(test.df) <- c("Year", paste(i))
  for.gas           <- left_join(for.gas, test.df)
}

# This doesn't
create.df <- function(df_name){
df_name <- tibble(Year = (start-1):(start+h-1))
for(i in countries){
  test.df           <- tibble(Year = (start-1):(start+h-1),
                              n    = NA
  )
  colnames(test.df) <- c("Year", paste(i))
  df_name           <- left_join(df_name, test.df)
}
}

# Expected results
# A tibble: 31 x 5
    Year Argentina Belgium Brazil Canada
   <int> <lgl>     <lgl>   <lgl>  <lgl> 
 1  2017 NA        NA      NA     NA    
 2  2018 NA        NA      NA     NA    
 3  2019 NA        NA      NA     NA    
 4  2020 NA        NA      NA     NA    
 5  2021 NA        NA      NA     NA    
 6  2022 NA        NA      NA     NA    
 7  2023 NA        NA      NA     NA    
 8  2024 NA        NA      NA     NA    
 9  2025 NA        NA      NA     NA    
10  2026 NA        NA      NA     NA    
# ... with 21 more rows

Вся помощь приветствуется. Спасибо.

1 Ответ

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

Проблема в том, что присвоение df_name произошло, но это не return ed

create.df <- function(df_name){
df_name <- tibble(Year = (start-1):(start+h-1))
for(i in countries){
  test.df           <- tibble(Year = (start-1):(start+h-1),
                              n    = NA
  )
     colnames(test.df) <- c("Year", paste(i))
     df_name           <- left_join(df_name, test.df)
     # assignment happened within the for loop
  }
 df_name  # note this step
 # or explicitly state to return (though not needed)
 # return(df_name) 
}

create.df(for.gas)
...