На языке R предположим, что у меня есть функция ff (jj, kk, mm). Я хотел бы, чтобы вызывающая функция (или вызывающий человек в интерактивном сеансе) могла заставить mm зависеть произвольным образом от jj и kk во время вызова.
Для конкретности предположим:
ff <- function(jj, kk, mm){
xx <- jj + kk
out<- xx/mm
out
}
Затем во время выполнения я хочу установить mm <- jj*kk
. то есть:
ff(2, 3, (jj*kk))
это дает:
Error in ff(2, 3, (jj * kk)) : object 'jj' not found
Эта ошибка не возникает до тех пор, пока не будет оценено mm
, то есть после того, как jj
и kk
уже были успешно оценены. Затем они оцениваются во второй раз с другими правилами области видимости. Я так понимаю, что это R-стандартная область видимости. Я спрашиваю, могу ли я написать функцию таким образом, чтобы она позволяла мне передать mm простое число или функцию других формальных аргументов, при условии, что эти аргументы были или могут быть оценены до того, как потребуется mm
?
Обратите внимание, что я не спрашиваю, должен ли я это делать. Я решительно сделаю вид, что буду вежливым с людьми, которые высказывают свое мнение по этому последнему вопросу.
Я также не спрашиваю, могу ли я предварительно вычислить jj и передать предварительно обработанное число. Я знаю, что это правдоподобный ответ, но он не работает по причинам, которые я упростил для решения проблемы.
jj=99; kk=101; ff(2,3,(jj*kk))
игнорированию значенийjj
иkk
, которые вы только что установили, потому что они оцениваются внутри функции, когда они равны 2 и 3 соответственно. Это удивит любого пользователя R, который не читал документацию по _4 _... - person Spacedman   schedule 11.07.2014