根据另一个参数定义默认参数

时间:2018-02-21 10:48:28

标签: r arguments

对于这里真正的裂缝,这可能是相当明显的。但是!我敢问这个问题。我正在寻找一种基于第二个参数定义参数的方法。我还没有找到R的答案,但这个问题对我有帮助(我不是python用户,顺便说一句): python question

csv <- function(x, name = NULL) { #defines name as NULL

  if (is.null(name)) { #tests if name is NULL and when yes, 
                       #uses x for naming of the file
    file <- deparse(substitute(x))
    name <- paste0(file,'.csv')
    write.csv(x, name, row.names = F)

  } else {             #if name argument is defined , 
                       #then this will happen 
     name1 <- paste0(name,'.csv')
     write.csv(x, name1, row.names = F)
  }
}

这很有效。我的csv-function默认使用第一个参数的名称作为文件名。

我现在可以用

调用csv()
csv(my_df)

csv(my_df, 'creative_name')

但是,我想知道,如果有一个更优雅的方式比这个条件语句做这种东西。干杯。

1 个答案:

答案 0 :(得分:1)

我认为您可以执行以下操作。请注意,我已将write_csv(x)语句替换为return(list(x))以用于说明目的。

csv <- function(x, name = deparse(substitute(x))) {
  name1 <- paste0(name,'.csv')
  return(list(x, name1, row.names = F))    
}

y = head(mtcars,5)
csv(y)

输出:

[[1]]
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2

[[2]]
[1] "y.csv"

$row.names
[1] FALSE

希望这有帮助!