【问题标题】:Trying to wrap a function around my tibble-creating code试图围绕我的 tibble 创建代码包装一个函数
【发布时间】:2019-01-08 08:29:19
【问题描述】:

没有函数包装的代码会执行所需的操作,但是当我将函数包装在它周围时会返回 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

感谢所有帮助。谢谢。

【问题讨论】:

    标签: r dataframe dplyr tibble


    【解决方案1】:

    问题是“df_name”的分配发生了,但不是returned

    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)
    

    【讨论】:

    • 这是一个闪电般的快速回复!在感谢您的帮助之前,我不得不睡觉和上班!
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多