Ist es möglich, Methodennamen als Wrapper Funktionsargument in R zu übergeben?

stimmen
1

Ich arbeite an einem R-Skript basiert auf RSelenium Bibliothek, die „Schaben Szenarien“ in Form eines tibble zu verwenden richtet. Daher würde Ich mag eine Funktion verwenden, dass bestimmte Argumente nach der bestimmten Aktion von Remote-Treiber zurückkehren würde. Die allgemeine Idee ist, etwas zu haben, die Argumente zu Methoden Syntax konvertieren:

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

Also, wenn ich rufe:

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, [@=...])

Hier ist die Probe, die ich am Ende habe mich mit:

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))

}

Die doppelte eckigen Klammern Konvention in scraperMethods [[Methode]] scheint in globalem Umfeld zu arbeiten, aber wenn ich rufe

scraper(remDr, open)

oder andere Verfahren, definiert so weit innerhalb des Schabers Funktion. Es wirft einen Fehler:

Fehler: $ Operator ist ungültig für Atom-Vektoren

Also meine Fragen sind: 1. Ist das der richtige Ansatz? 2. Wenn nicht - ist es bequemer Weg, um mein Ziel zu erreichen?

Vielen Dank im Voraus für alle Antworten.

Veröffentlicht am 09/10/2019 um 18:52
quelle vom benutzer
In anderen Sprachen...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more