Используйте элементы вектора в качестве входных данных для функции нескольких аргументов - PullRequest
0 голосов
/ 06 июня 2018

Это должно быть просто, но я не могу понять это.Предположим, у меня есть функция с n аргументами, скажем:

example <- function(a, b, c){a*b + c}

У меня также есть вектор x длины n , и я хочу использовать его каквход для функции, то есть: я хочу оценить

example(x[1], x[2], x[3])

Конечно, набирать это не так уж плохо для n = 3 , но это становится раздражающим от n = 5 года.Поэтому в идеале я бы просто набрал

example(x)

и R понял, что я имею в виду, но это не сработало.(Он скажет мне argument b missing with no default, по-видимому, принимая все x равным a, а затем уже не с чем работать.)

Так что есть какой-то трюк для этого, например, путем автоматической генерациикод "a = x[1]; b = x[2]; c = x[3]", а затем волшебным образом получить это без кавычек и оценить внутри example до остальной части определения?

1 Ответ

0 голосов
/ 07 июня 2018

Вы можете решить эту проблему с помощью do.call.Но вы должны привести аргумент функции (второй аргумент do.call) к list.

example <- function(a, b, c){a*b + c}

x <- 1:3
do.call(example, as.list(x))
#[1] 5

Однако обратите внимание, что это не удастся, если вектор слишком короткий или слишком длинный:

y <- 1:4
do.call(example, as.list(y))
#Error in (function (a, b, c)  : unused argument (4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...