Передача нескольких аргументов в функцию в apply - PullRequest
0 голосов
/ 13 октября 2019

У меня проблема с передачей нескольких аргументов в apply в функцию. Чтобы быть точным, у меня есть логическая функция N аргументов, от a1 до aN , и я хочу вычислить таблицу истинности для данной функции. Вот пример, мажоритарная функция из 3 аргументов

majority <- function(a1, a2, a3) {
  (a1 & a2) | (a2 & a3) | (a1 & a3)
}

Я также генерирую таблицу, содержащую все возможные входные данные для функции

truth <- matrix(nrow = 2^3, ncol = 3+1)
for (i in 1:(2^3)) {
  truth[i, -(3+1)] <- rev(as.numeric(intToBits(i-1)))[-(1:(32-3))]
  # a bit flimsy but thats not the point
}

Затем я хочу заполнить последний столбецсо значениями данной функции из соответствующей строки входов, но код ...

apply(truth[, -(3+1)], 1, majority)

... возвращает ошибку: Error in FUN(newX[, i], ...) : argument "a2" is missing, with no default

Как я могу использовать приложениефункция для передачи нескольких аргументов функции? Я знаю, что вы можете использовать функцию do.call, чтобы передать список аргументов функции, но это не работает внутри приложения.

Любая помощь будет принята.

1 Ответ

0 голосов
/ 13 октября 2019

Здесь вы можете использовать функцию apply следующим образом:

apply(truth[, -(3+1)], 1, function(x) majority(a1 = x[1], a2 = x[2], a3 = x[3]))

В вышеприведенном представлении x представляет собой заданную строку вашей truth матрицы. Мы переходим к вашей функции большинства a1 = x[1], a2 = x[2], a3 = x[3] (три элемента в строке x)

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