我正在尝试将 R 函数的点参数用于数据导入函数。该函数应采用文件路径列表
data_list
并接受更多参数以传递给内部使用的 fread()
函数。它应该导入指定的文件并将它们绑定到一个数据框中。输出保存到全局环境中。
到目前为止的例子和想法:
我有一个文件夹“test1”,包含一个文件和一个文件夹“test2”,包含多个文件。这些文件是具有相同内部结构的 .txt 文件(在本例中为 4 行无用的标题和 4 行数据),如下所示:
this is
a header
with some text
that should be ignored when importing
1;2;3;4
2;2;4;2
3;4;3;2
4;2;3;1
我生成我的列表:
data_list_1 <- list.files(path = "./test1",
recursive = TRUE,
pattern = "*.txt",
full.names = TRUE)
data_list_2 <- list.files(path = "./test2",
recursive = TRUE,
pattern = "*.txt",
full.names = TRUE)
在单个文件的情况下,将参数传递给
fread()
有效:
data_import_test_1 <- function(data_list, ...) {
.GlobalEnv$test_import <- fread(file = data_list, ...)
}
# imagine i have a fileset where i need to skip the first 4 rows when
# importing (data_list_1 contains a single file path)
data_import_test_1(data_list = data_list_1, skip = 4)
# output created is a dataframe of the specified file
# without the first 4 rows
但是现在我想用
fread()
一次导入多个文件并用rbind()
将它们附加在一起所以我想把它包在lapply()
里面像这样:
data_import_test_2 <- function(data_list, ...) {
.GlobalEnv$test_import <- do.call(what = rbind,
args = lapply(data_list,
function(x, ...) fread(x, ...))
}
# imagine i have multiple files of the same format as the single file
# from the import above and data_list_2 contains all of them
data_import_test_2(data_list = data_list_2, skip = 4)
# output created still contains the rows i wanted to skip,
# the skip = 4 argument doesnt reach fread()
有没有人知道如何处理切换而不必将其硬编码到函数参数中?我将对来自不同来源的分段数据集使用我的函数,这些数据集需要对 fread 进行不同的输入。这意味着我真的很想让我的功能动态地移交我需要输入 fread 的任何东西。
非常感谢大家看到这里,提前谢谢你们!
我知道我可以像这样将参数硬编码到我的函数中:
data_import_test_2 <- function(data_list, fread_skip) {
.GlobalEnv$test_import <- do.call(what = rbind,
args = lapply(data_list,
function(x, fread_skip = fread_skip)
fread(x, skip = fread_skip))
}
我想对不同的数据集使用
fread
的其他参数,我不想将它们全部包含在我的函数参数中,因为这会造成很多混乱并降低可读性。