使用 rbind.xts 和用户定义的函数从文件列表中构建一个大型 xts 对象

building a large xts object out of a list of files with rbind.xts and a user defined function

我正在尝试从文件列表中创建一个大型 xts 数据集。我能够通过如下所示的显式来实现这一点,其中 read.cqg 是一个用户定义的函数,它使用 read.zooas.xts 将数据 read/convert 转换为 xts 对象。所以每个 read.cqg 调用 returns 一个 xts 对象。

下面的代码有效 returns 一个大的 xts 对象。

large_xts_object <- rbind.xts(read.cqg("somefile01.txt"),
                              read.cqg("somefile02.txt"),
                              read.cqg("somefile03.txt"),
                              read.cqg("somefile04.txt"),
                              read.cqg("somefile05.txt"),
                              read.cqg("somefile06.txt"),
                              read.cqg("somefile07.txt"))

我想使用正则表达式和 lapply 来避免必须显式地写文件名。这将帮助我理解使用 lapply 并缩短代码。

这是我的尝试,并没有给我想要的结果。

large_xts_obj <- rbind.xts(lapply(list.files(pattern="^somefile*.*txt"), read.cqg))

这是 returns 一大串 xts 对象,而不仅仅是一个大的 xts 对象。我如何使用 rbind.xts、我的自定义 read.cqg 函数和 list.filespattern 参数来创建我想要的单个 xts 对象?

您不应直接调用方法(例如 rbind.xts)。只需使用通用函数并让 R 执行方法分派。除此之外,您评论中的代码是正确的。

do.call 允许您通过提供函数和参数列表来构造和评估函数调用。在这种情况下,参数列表是您通过 read.cqg.

读取的 xts 对象列表
files <- list.files(pattern = "^files*.*txt")
xts_object_list <- lapply(files, read.cqg)
large_xts_object <- do.call(rbind, xts_object_list)