Prosta odpowiedź jest taka, że nie można i nie powinno próbować. To łamie zakres i może siać spustoszenie, jeśli jest to dozwolone. Jest kilka opcji, które możesz inaczej pomyśleć o problemie.
pierwszy przebieg y jako funkcję
foo<-function(x,y=min){
m<-1:10
x+y(m)
}
jeśli prosta funkcja nie działa, można przenieść m do argumentu z domyślnie.
foo<-function(x,y=min(m),m=1:10){
x+y(m)
}
Ponieważ jest to przykład zabawkowy, zakładam, że byłoby to zbyt trywialne. Jeśli nalegasz na łamanie zakresu, możesz przekazać go jako wyrażenie, które jest jednoznacznie ocenione.
foo<-function(x,y=expression(min(m))){
m<-1:10
x+eval(y)
}
Następnie istnieje możliwość zwrócenia funkcji z innej funkcji. I to może zadziałać również dla ciebie, w zależności od twojego celu.
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
Ale teraz zaczynamy wpadać w niedorzeczność.
"Leniwe oceny działa tylko dla domyślnych argumentów", czy jesteś tego pewien? Ocena leniwy IIUC odbywa się przy wszystkich argumentach funkcji. Powód, dla którego twój przykład nie działa, polega na tym, że m nie znajduje się w zasięgu dzwoniącego. –