可以像这样保存和读取对象
# Save as file
saveRDS(iris, "mydata.RDS")
# Read back in
readRDS("mydata.RDS")
但这似乎不适用于用
xml2::read_html()
制作的对象。例子
library(rvest)
someobject <- read_html("https://stackoverflow.com/")
saveRDS(someobject, "someobject.RDS")
它创建了一个文件,但不像预期的那样
IE。
readRDS("someobject.RDS")
Error in doc_is_html(x$doc) : external pointer is not valid
发生了什么以及保存 html 对象的最简单方法是什么,以便它可以用最少的代码/大惊小怪加载回来?
最佳答案
回答“发生了什么”:saveRDS
正在尝试序列化正在保存的对象。在这里,对象 someobject
是一个包含元素的列表 someobject$doc
和 someobject$node
.元素的类型是 externalptr
(外部指针),这意味着它们引用了保存在内存中的 C 数据结构。当外部指针被序列化时,引用会丢失。因此错误“外部指针无效”。
您可以序列化 someobject
使用 as.character()
并将其传递给 saveRDS
:
saveRDS(as.character(someobject), "someobject.RDS")
然后使用
readRDS
重新创建对象和 read_html
:someobject <- read_html(readRDS("someobject.RDS"))
但是更容易使用
write_html()
正如其他人所建议的那样。一些讨论 in this Github issue thread .
关于r - 如何将 read_html 的输出保存和读取为 RDS 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764585/