如果未提供,则跳过函数内部的参数

时间:2017-11-22 09:20:35

标签: r if-statement cbind

我已经创建了一个重塑(pivot)数据的函数,但函数的最后一部分是cbind几列到df中。

pivot_df <-  function(df, new_col, col1, col2, col3) {
     df_col_selected <- df[ , c(col1, col2, col3)]
     df_col_selected_reshaped <- reshape(
       df_col_selected, 
       idvar = col2, 
       timevar = col3,
       direction = "wide"
    )
     df_reshaped <-cbind(df_col_selected_reshaped, new_col, col1)
}

因此,如果我调用该函数并给出列的名称,它会给我预期的结果。

pivot_df(df, new_col, col1, col2, col3)

但是我希望ifelse在此函数中有一个标记或new_col。我的意思是new_col将在最后cbind中跳过,如果它没有在函数中写入,就像这样:

pivot_df(df, col1, col2, col3)

这仍然会执行df_reshaped <-cbind (df_col_selected_reshaped, new_col, col1),但最后不会有new_col

我知道我可以在没有new_col的情况下创建一个单独的函数,但是我希望有一个函数可以同时执行这两个函数。感谢

1 个答案:

答案 0 :(得分:1)

您可以将NULL设置为pivot_df <- function(df, new_col = NULL, col1, col2, col3) { df_col_selected <- df[ , c(col1, col2, col3)] df_col_selected_reshaped <- reshape( df_col_selected, idvar = col2, timevar = col3, direction = "wide" ) if(!is.null(new_col)){ df_reshaped <-cbind(df_col_selected_reshaped, new_col, col1) }else{ df_reshaped <-cbind(df_col_selected_reshaped, col1) } } 作为默认值:

z-index: 0 !important;