Я пытаюсь создать функцию, где аргумент по умолчанию задается переменной, которая существует только в среде временно, например:Наследование R аргумент функции от глобальной переменной
arg=1:10
test=function(x=arg[3]){2*x}
> test()
[1] 6
выше работает отлично, до тех пор, поскольку arg существует в среде функций. Однако, если я удалю ARG:
> rm(arg)
> test()
> Error in test() : object 'arg' not found
Есть ли способ, например, что аргумент по умолчанию принимается 3, даже если аргумент перестает существовать? Я чувствую, что правильный ответ включает в себя некоторую смесь eval, quote и/или замены, но я не могу найти правильное заклинание.
Что вы пытаетесь достичь? Вы можете изменить 'test'' environment' и назначить 'arg' там -' environment (test) = new.env(); environment (test) $ arg = 1: 10', если вы хотите удалить 'arg' из глобальной среды. –
Существует несколько маршрутов, которые бы достигли аналогичного поведения, но я думаю, я просто хочу знать, можно ли оценивать значение аргумента статически. В крайнем случае я мог четко написать все как скрипт (с 3-м элементом аргумента, который вычисляется явно как 3 и устанавливается как значение по умолчанию для x) и источник этого. Есть ли способ достичь этого полностью в среде R? – ASGR
Вы можете 'eval' аргументы и повторно назначить их с помощью' 'formals <-" '- например. 'formals (test) $ x = eval (formals (test) $ x)'. Вы также можете сделать промежуточную функцию, которая оценивает свои аргументы и возвращает функцию с оцененными аргументами. –