関数のリスト作ろうとしたら妙なことが起こった

para1 <- c(  1,  3,  5)
para2 <- c(  7, 11, 13)
parameter <- data.frame(para1, para2)

こんな感じでパラメータのリスト作っておいて

## case 1
fun <- lapply(parameter,
              function(x){
                function(){
                  x[1] + x[2] + x[3]
                }})

こうやってパラメータが違うだけの関数のリストを作ろうとした.

> fun[[1]]()
[1] 31
> fun[[2]]()
[1] 31

上手く動かない…
ところが途中で一度引数を呼び出すと

## case 2
fun2 <- lapply(parameter,
               function(x){
                 hoge <- x   ## <- ココ
                 function(){
                   x[1] + x[2] + x[3]
                 }})
> fun2[[1]]()
[1] 9
> fun2[[2]]()
[1] 31

上手く動く.スコープとかイマイチ理解してないんですがその辺の問題なんですかね.
追記:遅延評価が問題になってるらしい(syou6162 thx!)
一度呼び出すことでxが評価されるから?ということらしい.ただ気になるのは中身が同じに見えるということ

> fun
$para1
function () 
{
    x[1] + x[2] + x[3]
}
<environment: 0x01c22e3c>

$para2
function () 
{
    x[1] + x[2] + x[3]
}
<environment: 0x01c22d78>

> fun2
$para1
function () 
{
    x[1] + x[2] + x[3]
}
<environment: 0x0455f850>

$para2
function () 
{
    x[1] + x[2] + x[3]
}
<environment: 0x0455f71c>

fun2は評価前に見えるけど,ちゃんと動くんだから評価されてるってことなんだろう.これはそういう仕様なのか?
追記2: これはまだ評価されていません.サーチパス上に適切に評価されたオブジェクトが有るか否かが鍵です.cf.Rにおける遅延評価や環境,サーチパスのこと - もうカツ丼でいいよな