Написание функции в R, которая использует векторные операции, чтобы ее можно было применить к вектору - PullRequest
0 голосов
/ 20 марта 2020

Я преподаю класс, в котором есть группа начинающих R. Мы столкнулись с задачей построения функции, которая берет вектор и скаляр и выполняет с ним некоторые сложные вычисления. Я упростил его до этого, и это та часть, которая доставляет мне трудные времена:

myfun <- function(xs, mu){
   sum((xs - mu)^2)
}

Мне нравится этот способ определения функции, потому что он очень прост и напрямую соответствует математической сигма-записи, которая фактически используется в определении функции, которую мы строим. Функция отлично работает, когда я применяю к вектору и скаляру: myfun(c(1, 2, 3), 5)

Проблема в том, что когда я пытаюсь построить ее (как функцию mu), она будет применена к вектору. Тогда вычитание в сумме приобретает совершенно иной смысл, и все это терпит неудачу, и сюжет заканчивается совершенно неверно.

Я могу исправить это, определив функцию следующим образом:

myfun <- function(xs, mu){
   sapply(mu, function(x) {sum((xs - x)^2)})
}

или, используя purrr, несколько короче

myfun <- function(xs, mu){
   map_dbl(mu, ~sum((xs - .x)^2))
}

Оба они добавляют дополнительный уровень сложности поверх простого суммирования, которое появляется в определении функции.

У меня такой вопрос: Какой самый простой и легкий способ объяснить способ определения функции, подобной этой, чтобы она хорошо отображалась с использованием ggplot2 (фактически, ggformula)?

1 Ответ

1 голос
/ 21 марта 2020

myfun_v <- Vectorize(myfun)

Это даст вам векторную версию функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...