Я работаю над сценарием R, основанным на библиотеке RSelenium, который нацелен на использование «сценариев очистки» в виде таблицы. Поэтому я хотел бы использовать функцию, которая в соответствии с определенными аргументами возвращает определенное действие удаленного драйвера. Общая идея состоит в том, чтобы иметь что-то, что преобразует аргументы в синтаксис методов:
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. Если нет - есть ли более удобный способ достижения моей цели?
Заранее спасибо за все ответы.