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

时间:2016-04-19 03:16:53

标签: regex r xts lapply rbind

我正在尝试从文件列表中创建一个大的xts数据集。我能够通过如下所示的显式来实现这一点,其中read.cqg是用户定义的函数,它使用read.zooas.xts来读取/转换数据到xts对象。因此每个read.cqg调用都会返回一个xts对象。

下面的代码可以工作并返回一个大的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))

这将返回一个大的xts对象列表,而不是一个大的xts对象。如何使用rbind.xts,我的自定义read.cqg函数和pattern list.files参数来创建我想要的单个xts对象?

1 个答案:

答案 0 :(得分:1)

您不应直接调用方法(例如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)