首页 > 解决方案 > 是否可以在 R 中将方法名称作为包装函数参数传递?

问题描述

我正在开发一个基于 RSelenium 库的 R 脚本,该脚本旨在以 tibble 的形式使用“抓取场景”。因此,我想使用一个函数,根据某些参数将返回远程驱动程序的某些操作。一般的想法是有一些东西可以将参数转换为方法语法:

scraper(driver, method, arguments) == driver$method(arguments)

所以如果我打电话:

scraper(remDr, "open") - it simply does - remDr$open()
scraper(remDr, "navigate", "https://google.com") - it does - remDr$navigate("https://google.com")
scraper(remDr, "findElement", list(using = "xpath", "[@=...]") - it does - remDr$findElement("xpath", "[@=...]")

这是我最终得到的示例:

scraper <- function(driver, method, arguments = "") {

  open <- function(driver) {
    return(
        driver$open()
    )
  }

  close <- function(driver) {
    return(
        driver$close()
      )
  }

  navigate <- function(driver, arguments) {
    return(
        driver$navigate(arguments)
      )
  }

  findElement <- function(driver, arguments) {
    return(
        driver$findElement(arguments)
      )
  }

  scraperMethods <- list(open = open, 
                         close = close, 
                         navigate = navigate, 
                         findElement = findElement)

  return(scraperMethods[[method]](arguments))

}

scraperMethods[[method]] 中的双括号约定似乎在全局环境中有效,但是当我调用时

scraper(remDr, "open")

或到目前为止在刮板功能中定义的其他方法。它抛出一个错误:

错误:$ 运算符对原子向量无效

所以我的问题是: 1. 这是正确的方法吗?2. 如果没有 - 有没有更方便的方法来实现我的目标?

提前感谢所有答案。

标签: rseleniumweb-scrapingrselenium

解决方案


推荐阅读