Возвращаясь к исходному примеру, просто используйте ensym()
для преобразования текстовых аргументов в символы, в этом случае нет необходимости в выражении.
library(ggplot2)
col <- "cut"
foo <- function(df, col){
col <- rlang::sym(col)
dplyr::mutate(df, !!col := tolower(!!col))
}
foo(diamonds, col)
#> # A tibble: 53,940 x 10
#> carat cut color clarity depth table price x y z
#>
#> 1 0.23 ideal E SI2 61.5 55 326 3.95 3.98 2.43
#> 2 0.21 premium E SI1 59.8 61 326 3.89 3.84 2.31
#> 3 0.23 good E VS1 56.9 65 327 4.05 4.07 2.31
#> 4 0.290 premium I VS2 62.4 58 334 4.2 4.23 2.63
#> 5 0.31 good J SI2 63.3 58 335 4.34 4.35 2.75
#> 6 0.24 very good J VVS2 62.8 57 336 3.94 3.96 2.48
#> 7 0.24 very good I VVS1 62.3 57 336 3.95 3.98 2.47
#> 8 0.26 very good H SI1 61.9 55 337 4.07 4.11 2.53
#> 9 0.22 fair E VS2 65.1 61 337 3.87 3.78 2.49
#> 10 0.23 very good H VS1 59.4 61 338 4 4.05 2.39
#> # … with 53,930 more rows
Создано в 2019-03-11 с помощью пакета представитель (v0.2.1) sup>
РЕДАКТИРОВАТЬ: Как указал Себ, это не является строго примером «расширения» плагина, более «инкапсуляции» 'плагин, так что принимайте его как есть:)
Вот что я сделал, чтобы упростить мое использование плагина автозаполнения jquery некоторое время назад:
// small autocomplete plugin wrapping the full autocomplete plugin for a standard look and feel
(function($) {
$.fn.standardAutocomplete = function(type) {
return this.autocomplete(ToAbsoluteUrl("~/System/Autocomplete/" + type), {
formatItem: formatItem,
formatResult: formatResult
});
// Autocomplete formatting callbacks
function formatItem(row) { return row[0] + "<span class=\"sub\">" + row[1] + "</span>"; }
function formatResult(row) { return row[0].replace(/(<.+?>)/gi, ''); }
}
})(jQuery);
Теперь это не следует "книге" практика кодирования jquery - например, я не учитываю тот факт, что может быть выбрано несколько элементов, но в этом случае я знаю, что никогда не буду выбирать с этим более одного элемента, поэтому я хотел быть простым, и это "работает для меня". Возможно, вам удастся использовать аналогичный подход, возможно, с большей сложностью.
Если плагин готов, у вас не так много альтернатив, кроме чем использование его опций для изменения его поведения.
Цель этого заключается в том, чтобы весь его код был инкапсулирован и не мешал другому коду, поэтому вы не можете вставить в него какой-либо код.
Если вам действительно нужно изменить его поведение, то, я думаю, вам нужно скопировать и вставить код.