我想在一个函数中组合一个函数的不同参数(例如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")
但是,我想在一个函数中组合header
,colClasses
和na.strings
自变量,这样我就不必重新键入所有自变量。我尝试了以下代码,但不起作用:
x <- function(){
header=TRUE
colClasses = c("numeric", "numeric")
na.strings = "None"
}
df <- read.table(path_to_file, x())
执行此操作的正确方法是什么?
答案 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")