2015-01-27 15 views
2

下面我有一個工作示例,說明我想要執行的功能,然後爲該函數編寫腳本,指出發生錯誤的位置。在一個函數中使用dplyr,使用函數參數對錯誤進行分組

的錯誤信息是:

Error: index out of bounds 

我知道通常意味着R可找不到被呼叫的變量。

有趣的是,在我下面的函數示例中,如果我只按我的subgroup_name(它傳遞給函數併成爲新創建的數據框中的一列)進行分組,則該函數將成功重組該變量,但我也想組由一個新創建的列(來自熔體)稱爲變量。

用於使用regroup()工作的類似代碼,但已被棄用。我試圖使用group_by_()但無濟於事。

我已經閱讀了許多其他帖子和答案,今天試驗了幾個小時,但仍然不成功。

# Initialize example dataset 
database <- ggplot2::diamonds 
database$diamond <- row.names(diamonds) # needed for melting 

subgroup_name <- "cut" # can replace with "color" or "clarity" 
subgroup_column <- 2 # can replace with 3 for color, 4 for clarity 

# This works, although it would be preferable not to need separate variables for subgroup_name and subgroup_column number 

df <- database %>% 
    select(diamond, subgroup_column, x,y,z) %>% 
    melt(id.vars=c("diamond", subgroup_name)) %>% 
    group_by(cut, variable) %>% 
    summarise(value = round(mean(value, na.rm = TRUE),2)) 

# This does not work, I am expecting the same output as above 

subgroup_analysis <- function(database,...){ 

    df <- database %>% 
    select(diamond, subgroup_column, x,y,z) %>% 
    melt(id.vars=c("diamond", subgroup_name)) %>% 
    group_by_(subgroup_name, variable) %>% # problem appears to be with finding "variable" 
    summarise(value = round(mean(value, na.rm = TRUE),2)) 
    print(df) 
} 

subgroup_analysis(database, subgroup_column, subgroup_name) 
+0

@Richard Scriven - 我想我是,與函數調用在代碼的最後一行:subgroup_analysis(數據庫,subgroup_column,subgroup_name)。但是,應該/可能直接傳遞「cut」和2而不是代理變量。讓我知道如果我失去了一些東西,並感謝您的期待 – 2015-01-27 01:02:32

+0

是的,對不起,我沒有看到最後的電話。你確定你想用點「...」來代替命名參數嗎? – 2015-01-27 01:07:14

+0

我很樂意使用命名參數,而且我也是這樣做的。閱讀關於group_by_導致修補...但我不是那種經驗與他們。 – 2015-01-27 01:08:38

回答

5

從NSE vignette

如果你也想輸出變量發生變化,你需要通過引用對象的.dots參數列表 :

這裏,variable應該被引用:

subgroup_analysis <- function(database,...){ 

    df <- database %>% 
    select(diamond, subgroup_column, x,y,z) %>% 
    melt(id.vars=c("diamond", subgroup_name)) %>% 
    group_by_(subgroup_name, quote(variable)) %>% 
    summarise(value = round(mean(value, na.rm = TRUE),2)) 
    print(df) 
} 

subgroup_analysis(database, subgroup_column, subgroup_name) 

正如mentionned由@RichardScriven,如果你打算把結果賦值給一個新的變量,那麼你可能想在最後去除print呼叫,只寫df,甚至不分配df在所有的功能

否則結果打印,即使你做x <- subgroup_analysis(...)

相關問題