在函数调用中使用 unlist

Posted

技术标签:

【中文标题】在函数调用中使用 unlist【英文标题】:Using unlist inside a function call 【发布时间】:2022-01-16 19:59:12 【问题描述】:

我正在尝试基于跨多个 URL 的网络抓取创建数据集。

对于这个例子,我试图抓取名为h2.title 的节点,它是li.portal_list_item 的子节点。即,我希望创建 one 向量,其中包含节点的所有值(每个 URL 上为 500)。

我希望在循环或函数中执行此操作。

URL 的一个子集是,

test_urls <- c("https://projekter.aau.dk/projekter/da/studentthesis/search.html?showAdvanced=true&advanced=true&pageSize=500&page=1",
               "https://projekter.aau.dk/projekter/da/studentthesis/search.html?showAdvanced=true&advanced=true&pageSize=500&page=2")

现在,我可以抓取节点并获得一个列表列表 - 500 个列表中的 2 个。但是,我想将 unlist 这个函数放入一个 1000 个长向量 inside 函数,所以我还可以使用该函数来创建数据集,因为我需要跨多个节点进行抓取 - 如果我可以简单地获得一个向量,我可以将它分配给数据集的一列。

library(rvest)
library(dplyr)

dfList <- lapply(test_urls, function(i) 
  webpage <- read_html(i)
  listitems <- html_nodes(webpage, "li.portal_list_item")
  .GlobalEnv$titles <- listitems %>% html_nodes("h2.title") %>% html_text()
)

如果我尝试在我的函数中使用unlist,它根本不起作用,我凭直觉理解 - 但是,我似乎找不到解决方案。

任何帮助都非常非常感谢!

【问题讨论】:

【参考方案1】:

我们可以使用collapse

dfList <- lapply(test_urls, function(i) 
  webpage <- read_html(i)
  listitems <- html_nodes(webpage, "li.portal_list_item")
  titles <- listitems %>% html_nodes("h2.title") %>% html_text()
  titles = paste(titles,collapse="\n")
  return(titles)
)

我们现在有一个包含两个元素的列表。

【讨论】:

以上是关于在函数调用中使用 unlist的主要内容,如果未能解决你的问题,请参考以下文章

使用R语言将不同长度的向量合并为数据框

R语言unlist函数将复杂数据(list列表dataframe字符串String)对象处理成简单向量vector形式:将包含dataframe和字符串的向量列表转换为单个向量(删除数据名称)

如何在函数中模拟函数。是不是可以使用两个或多个补丁来模拟函数中的函数调用?

c语言中如何一个函数的多次调用

C语言中函数怎么自己调用自己

在Python中使用字符串调用函数