gpt4 book ai didi

r - lapply,c() 和 list() 的区别

转载 作者:行者123 更新时间:2023-12-04 03:14:24 27 4
gpt4 key购买 nike

c() 和 list() 有什么区别?
我正在学习一些网页抓取并遇到了意外错误。
我写了一个小脚本来从 ESPN 网站的几页上抓取棒球数据:

library(magrittr)
library(rvest)

Baseball <- read_html("http://www.espn.com/mlb/stats/batting/_/qualified/true")
Baseball.2 <- read_html("http://www.espn.com/mlb/stats/batting/_/count/41/qualified/true")
Baseball.3 <- read_html("http://www.espn.com/mlb/stats/batting/_/count/81/qualified/true")
Baseball.4 <- read_html("http://www.espn.com/mlb/stats/batting/_/count/121/qualified/true")
Baseball.list <- c(Baseball, Baseball.2, Baseball.3, Baseball.4)


scrape <- function(html) {
temp.df <- data.frame(1:length(html %>%
html_nodes(paste0("td:nth-child(2)")) %>%
html_text()))
for (i in 2:19) {
temp.df[i - 1] <-
html %>%
html_nodes(paste0("td:nth-child(", i, ")")) %>%
html_text()
}
temp.df
}

当我运行时 df <- lapply(Baseball.list, scrape)我得到:
Error in UseMethod("xml_find_all") : 
no applicable method for 'xml_find_all' applied to an object of class "externalptr"

但是,如果我运行 Baseball.list <- list(Baseball, Baseball.2, Baseball.3, Baseball.4)然后以完全相同的方式使用 lapply 和我的函数,它可以毫无问题地工作!我查看了 c() 的文档并看到:
“这是一个通用函数,它结合了它的参数。
默认方法组合其参数以形成向量。所有参数都被强制转换为一个通用类型,即返回值的类型,除名称外的所有属性都被删除,“而 list() 的文档说它会将对象强制转换为列表。有人可以解释为什么在中使用 c()这个实例导致 lapply 失败?我不理解文档。

最佳答案

c() 的文档完全一样说,

"All arguments are coerced to a common type which is the type of the returned value, and all attributes except names are removed"



该列表按照 xml2::read_html 的意图保留了文档的类别。 .如果你看 source code for xml2 ,你会看到泛型方法 xml_find_all仅为 xml_missing 的类定义, xml_nodexml_nodeset
> class(read_html("<html><title>Hi<title></html>"))
[1] "xml_document" "xml_node"
> a = read_html("<html><title>Hi<title></html>")
> b = read_html("<html><title>Hi<title></html>")
> c = read_html("<html><title>Hi<title></html>")
> lapply(c(a,b,c), class)
$node
[1] "externalptr"

$doc
[1] "externalptr"

$node
[1] "externalptr"

$doc
[1] "externalptr"

$node
[1] "externalptr"

$doc
[1] "externalptr"

> lapply(list(a,b,c), class)
[[1]]
[1] "xml_document" "xml_node"

[[2]]
[1] "xml_document" "xml_node"

[[3]]
[1] "xml_document" "xml_node"

关于r - lapply,c() 和 list() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com