Отложенные вычисления переданных аргументов

Я не знаю о iTerm, но можно сделать это в Терминале. Инструкции могут быть найдены здесь:

Emacs на привязках клавиш Mac OS X Leopard

7
задан Prasad Chalasani 13 January 2011 в 20:24
поделиться

2 ответа

Простой ответ - вы не можете и не должны пытаться. Это нарушает рамки и могло бы нанести серьезный ущерб, если бы было разрешено. Есть несколько вариантов, которые можно рассматривать по-другому.

сначала передайте y как функцию

foo<-function(x,y=min){
m<-1:10
x+y(m)
}

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

foo<-function(x,y=min(m),m=1:10){
x+y(m)
}

Поскольку это так. игрушечный пример, я бы предположил, что это было бы слишком тривиально. Если вы настаиваете на нарушении области видимости, вы можете передать его как выражение, которое вычисляется явно.

foo<-function(x,y=expression(min(m))){
m<-1:10
x+eval(y)
}

Затем есть возможность вернуть функцию из другой функции. И это может сработать и для вас, в зависимости от вашей цели.

bar<-function(f)function(x,y=f(m)){
m<-1:10
x+y
}
foo.min<-bar(min)
foo.min(1)  #2
foo.max<-bar(max)
foo.max(1)  #10

Но теперь мы начинаем переходить к нелепому.

6
ответ дан 7 December 2019 в 07:48
поделиться

Мое решение заключалось в том, чтобы просто изменить аргумент по умолчанию:

R> formals(foo)$y <- call("max", as.name("m"))
R> foo(1)
[1] 11
1
ответ дан 7 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: