2015-07-10 73 views
1

我認爲這個問題的答案是,我不能,但不是完全屈服於墮落無奈之下,我會變成這個可愛的社區。用ggplot2在事實之後添加點;用戶定義的函數

我怎麼能已在策劃之後加分(或任何附加層)到ggplot?一般來說,我會將繪圖保存到一個變量,然後加上+ geom_point(...),但我試圖在我寫的函數中包含這個。如果plot = T,我希望函數創建一個新的plot,如果plot = F,則添加點到現有的plot。我可以用基本繪圖軟件包做到這一點:

fun <- function(df,plot=TRUE,...) { 
... 
if (!plot) { points(dYdX~Time.Dec,data=df2,col=col) } 
else { plot(dYdX~Time.Dec,data=df2,...) }} 

我想用不同的dataframes運行這個功能了無數次,造成情節與多個系列繪製。

例如,

fun(df.a,plot=T) 
fun(df.b,plot=F) 
fun(df.c,plot=F) 
fun(df.d,plot=F) 

的問題是,因爲R中的功能不具有副作用,我無法訪問在所述第一命令作出的曲線圖。我無法將劇情保存到 - > p,然後在後面的函數中回憶p。至少,我認爲我不能。

+1

你爲什麼不將plot變量傳遞給你的函數,然後根據'plot = T/F'返回附加的圖或新的圖? – mts

+0

也許吧!如果我在函數中定義plot變量,如何將plot變量傳遞給我的函數?是否有一種方法可以在函數外定義的變量在該函數之外使用? – Unrelated

+0

退貨。如果你想從你的函數返回多個對象到你的工作環境中,那麼把所有東西都放到一個列表中。在第一次迭代中只需傳遞一個空的圖到你的函數 – mts

回答

1

有一個ggplot劇情對象從你的函數返回,你可以養活你的下一個函數調用是這樣的:

ggfun = function(df, oldplot, plot=T){ 
    ... 
    if(plot){ 
    outplot = ggplot(df, ...) + geom_point(df, ...) 
    }else{ 
    outplot = oldplot + geom_point(data=df, ...) 
    } 
    print(outplot) 
    return(outplot) 
} 

記得分配劇情對象返回給一個變量:

cur.plot = ggfun(...)