使用 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.zoo
和 as.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.files
的 pattern
参数来创建我想要的单个 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)
我正在尝试从文件列表中创建一个大型 xts 数据集。我能够通过如下所示的显式来实现这一点,其中 read.cqg
是一个用户定义的函数,它使用 read.zoo
和 as.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.files
的 pattern
参数来创建我想要的单个 xts 对象?
您不应直接调用方法(例如 rbind.xts
)。只需使用通用函数并让 R 执行方法分派。除此之外,您评论中的代码是正确的。
do.call
允许您通过提供函数和参数列表来构造和评估函数调用。在这种情况下,参数列表是您通过 read.cqg
.
files <- list.files(pattern = "^files*.*txt")
xts_object_list <- lapply(files, read.cqg)
large_xts_object <- do.call(rbind, xts_object_list)