Почему аргумент не передается apply ()? - PullRequest
0 голосов
/ 06 марта 2020

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

A <- matrix(0, nrow = 2, ncol = 2)
apply(A, 1, function (x, ...) { cat("argument arg1: "); print(arg1); }, arg1 = 10)
# Argument arg1: Error in print(arg1) (from #1) : object 'arg1' not found

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

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Проблема не в том, что этот аргумент не передается функции (он есть), проблема в том, что вы не «перехватываете» его через именованный параметр. Это работает, например,

apply(A, 1, function (x, ..., arg1) { cat("argument arg1: "); print(arg1); }, arg1 = 10)

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

apply(A, 1, function (x, ...) { print(list(...)) }, arg1 = 10)

Так как ваша функция использует ..., те значения, которые не названы, остаются "в" точках. Чтобы получить их, вам нужно захватить их как аргументы.

0 голосов
/ 06 марта 2020

Если вы хотите передать более одного аргумента, вы можете вместо этого использовать mappy ().

mapply(your_function, arg1, arg2, argn

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