2016-11-17 70 views
6

我寫了一個函數來繪製條形圖。但是當我到達面時,'〜'符號讓事情變得困難。如何在函數內編寫facet_wrap(ggplot2)

rf.funct <- function(dat, predictor, feature){ 
    ggplot(get(dat), aes(get(predictor), N)) + 
    geom_bar(stat = 'identity') + 
    facet_wrap(get(~feature)) # this is where the problem is 
} 

我已經試過如下:

facet_wrap((get(~feature))) # invalid first argument 
facet_wrap(paste0("~ ", get(feature))) # object 'feature' not found 

我如何確保「〜」符號被包含在功能?

+0

功能是字符串還是? – JasonWang

+1

如果您從代碼中移除「get」,會發生什麼情況? –

+1

'facet_wrap(paste(「〜」,feature))'。而且,正如@JakeKaupp所說,擺脫所有「get」的情況。 – eipi10

回答

6

您不需要使用get。您已使用dat參數將數據幀傳遞到函數中,因此只需將dat提供給ggplot,並且它將具有來自其環境中的數據數據。

rf.funct <- function(dat, predictor, feature) { 
    ggplot(dat, aes_string(predictor, "N")) + 
    geom_bar(stat = 'identity') + 
    facet_wrap(feature) 
} 

predictorfeature參數應該輸入字符串。然後你可以使用aes_string來指定美學。 facet_wrap現在可以直接使用字符向量,而不需要公式(正如@魏永旺所指出的那樣)。

+1

在ggplot 2.1.0中,'facets'參數可以是「公式或字符向量,使用單側公式'〜a + b'或者一個字符向量'c(」a「,」b 「)」。」所以如果OP使用更新版本的ggplot,'paste(...)'可能是多餘的。 –

+0

我正在使用get(),因爲函數包含ggplot代碼上面的一些data.table代碼。我明白,我不需要使用get()作爲ggplot節,謝謝! – ant

+0

謝謝@魏永旺。我相應地更新了我的答案。 – eipi10