我有一个简单的 Map
函数,可以从博客网站抓取文本文件。获得一个抓取器来获取所有文本文件并将它们下载到我的工作目录非常容易。我的目标:使用 ifelse()
或简单的 if
语句仅根据特定日期抓取文件。
例如,如果四个文件于 2019 年 1 月 31 日发布,并且我将 ifelse
指向该日期,则该函数将返回这四个文件。代码:
library(tidyverse)
library(rvest)
# URL set up
url <- "https://www.example-blog/posts.aspx"
page <- html_session(url, config(ssl_verifypeer = FALSE))
# Picking elements
links <- page %>%
html_nodes("td") %>%
html_nodes("a") %>%
html_attr("href")
# Getting date elements
dates <- page %>%
html_nodes("node.dates") %>%
html_text()
dates <- parse_date_time(dates, "%m/%d/%Y", tz = "EST",
locale = Sys.getlocale("LC_TIME"))
# Function
out <- Map(function(ln) {
fun1 <- html_session(URLencode(
paste0("https://www.example-blog", ln)),
config(ssl_verifypeer = FALSE))
write <- writeBin(fun1$response$content)
ifelse(dates == '2019-01-31', write, "He's dead, Jim")
}, links)
我尝试了各种方法来获取 if 语句,并移动 writeBin
。 (通常 writeBin
不会被矢量化 - 我这样做是为了在我的 ifelse
中轻松查看)。错误:
Error in ans[test & ok] <- rep(yes, length.out = length(ans))[test & ok] :
replacement has length zero
如果我省略 if
代码,一切都会很好,它只会返回许多文本文件,而我只想要指定日期的文件。
最佳答案
根据描述,似乎检查每个“链接”相应的“日期”,然后应用if/else
。如果是这种情况,那么我们可以在 Map
Map(function(ln, y) {
fun1 <- html_session(URLencode(
paste0("https://www.example-blog", ln)),
config(ssl_verifypeer = FALSE))
write <- writeBin(fun1$response$content)
if(y == '2019-01-31') {
write
} else "He's dead, Jim"
},
links, dates)
关于r - 将 ifelse() 添加到 Map 函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54771797/