我正在尝试从文件列表中创建一个大的xts数据集。我能够通过如下所示的显式来实现这一点,其中read.cqg
是用户定义的函数,它使用read.zoo
和as.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对象?
答案 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)