在R中的新函数中合并函数参数

时间:2019-05-14 14:45:39

标签: r function

我想在一个函数中组合一个函数的不同参数(例如read.table)。

通常,我将具有以下代码来加载数据框:

df <- read.table(path_to_file, header=TRUE, colClasses = c("numeric", "numeric"), na.strings = "None")

如果我想加载多个不同的数据帧,请重新输入所有参数:

df2 <- read.table(path_to_file, header=TRUE, colClasses = c("numeric", "numeric"), na.strings = "None")
df3 <- read.table(path_to_file, header=TRUE, colClasses = c("numeric", "numeric"), na.strings = "None")

但是,我想在一个函数中组合headercolClassesna.strings自变量,这样我就不必重新键入所有自变量。我尝试了以下代码,但不起作用:

x <- function(){
header=TRUE
colClasses = c("numeric", "numeric")
na.strings = "None"
}

df <- read.table(path_to_file, x())

执行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以简单地将其包装在这样的新功能周围

read.table2 = function(path_to_file){
  read.table(path_to_file, header=TRUE, 
             colClasses = c("numeric", "numeric"), 
             na.strings = "None")
}

df = read.table2(path_to_file)

答案 1 :(得分:2)

以下是一些替代方案:

1)purrr :: partial partial中的purrr函数可用于创建已设置了指定参数的新函数。

library(purrr)

my.read.table <- partial(read.table, 
  header = TRUE, colClasses = c("numeric", "numeric"), na.strings = "None")

my.read.table("myfile.dat")

功能包中的Curry功能和diversitree包中的set.defaults功能相似。另请参阅Quantmod软件包中的setDefaults,以获取相关方法。

2)包装器:该包装器更改了所指定参数的默认值,同时保留了进一步覆盖它们的功能。

my.read.table.2 <- function(..., 
  header = TRUE, colClasses = c("numeric", "numeric"), na.strings = "None") {

  read.table(..., header = header, colClasses = colClasses, na.strings = na.strings)
}

my.read.table.2("myfile.dat")