2014-01-22 14 views
3

基本信息怪:東西在我的筆記本電腦的Latticeplot

SO: Windows 7 x64 
R version 3.0.2 (2013-09-25) -- "Frisbee Sailing" 

問題:

當我運行下面的代碼:

x <- rnorm (100) 
z <- z + rnorm(100) 
f <- gl(2,50,labels =c("Groups 1" , "Groups 2")) 
xyplot (z ~ x | f, 
    panel = function (x, z, ...) { 
     panel.xyplot(x,z, ...) 
     panel.abline(h = median(z), 
        lty=2 
        ) 
    }) 

我得到是在控制檯上,但不是沒有錯誤圖表或者,代替圖的接收兩個空圖表盒用此誤差內:

"error using packet 2, argument "z" in missing, with no defaults" 

但在環境「Z」存在,它是有效的!

如果我運行Ÿ代替Z該運行腳本預期兩個圖形繪製一個另一邊(代碼工作)。這裏發生了什麼?

回答

3

面板功能通過座標xy,從符號y ~ x。因此,你根據這些參數編寫面板函數,而不是傳遞給這些參數的自己的數據對象的名稱。然後它的工作原理:

x <- rnorm (100) 
z <- x + rnorm(100) 
f <- gl(2,50,labels =c("Groups 1" , "Groups 2")) 
df <- data.frame(x = x, z = z, f = f) ## I prefer objects in data frames 
xyplot (z ~ x | f, data = df, 
    panel = function (x, y, ...) { 
     panel.xyplot(x, y, ...) 
     panel.abline(h = median(y), 
        lty=2 
        ) 
    }) 
+2

這是正確的,很好的解釋。什麼是有點令人驚訝,在我看來,就是可以設置'面板=功能(X,Y = Y,...)'** **或'面板=功能(X,Y = Z,...) ',而且兩者工作同樣好。我不希望第二個工作,但它確實:在提供的面板函數內部放置一個'browser()'調用,即使找到一個正確長度的變量「y」。好奇這裏發生了什麼事。 –

+0

很好的解釋....感謝很多@Gavin。 – Hackerman

+2

@Josh,'function(x,y = y,...)'只適用於晶格明確傳遞'y',所以默認從不使用。如果使用了默認值,它將會是循環引用並失敗。關於'函數(x,y = z,...)''z'同樣從不使用。 –