如果未提供,则跳过函数内部的参数
skip a parameter inside function if not provided
我创建了一个函数来重塑(透视)数据,但该函数的最后一部分是 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
的情况下创建一个单独的函数,但我想要一个可以同时执行这两项操作的函数。谢谢
您可以将 new_col
设置为默认 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)
}
}
我创建了一个函数来重塑(透视)数据,但该函数的最后一部分是 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
的情况下创建一个单独的函数,但我想要一个可以同时执行这两项操作的函数。谢谢
您可以将 new_col
设置为默认 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)
}
}