r - 将 ifelse() 添加到 Map 函数中

标签 r if-statement

我有一个简单的 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/

相关文章:

Python Pandas 根据多个其他列中的条件替换一列中的值

c - 检查变量是否为某物值的方法

python - 检查字符串的任何字符是否在列表中

if-statement - 渲染函数 ReactJS 中的 IF block

r - 保存 Shiny session 的安全方法?

r 删除某些字符后的列名部分

r - Vector,ggplot2不知道如何处理numeric类的数据

javascript - 我可以在 Javascript 中使用简写 if && 执行多个语句吗?

r - 根据其他行是否唯一来选择行的值

r - 跳过在 fread R 中产生错误的行/行