2017-03-17 68 views
1

我做了一個使用dplyr的函數。我可以使用get()select_()選擇參數,但不適用於mutate()dplyr:在select_()和mutate()中使用環境變量

這是我使用的代碼。

創建測試數據:

test <- tibble(Q1=c(NA,NA,NA,4,5), 
     Q2=c(1,2,NA,NA,NA), 
     Q3=c(NA,NA,3,NA,NA), 
     Group=c("B", "B", "C", "A", "A")) 

這將返回錯誤。

## Create y column 
create_y <- function(x1, x2, x3, Group){ 
    length <- length(x1) 
    res <- c() 
    for (i in 1:length){ 
     if(Group[i]=="A") 
      res <- c(res, x1[i]) 
     if(Group[i]=="B") 
      res <- c(res, x2[i]) 
     if(Group[i]=="C") 
      res <- c(res, x3[i]) 
    } 
    return(res) 
} 

reg_figure <- function(var1, var2, var3){ 
    test %>% select_(.dots=c(get("var1"), get("var2"), get("var3"), "Group")) %>% 
    mutate(y=create_y(as.name(get("var1")), as.name(get("var2")), as.name(get("var3")), Group)) 
} 

reg_figure("Q1", "Q2", "Q3") # error 

我想這樣的結果:

| Q1 | Q2 | Q3 | Group | y | 
|----|----|----|-------|---| 
| NA | 1 | NA | B  | 1 | 
| NA | 2 | NA | B  | 2 | 
| NA | NA | 3 | C  | 3 | 
| 4 | NA | NA | A  | 4 | 
| 5 | NA | NA | A  | 5 | 

回答

1

使用.[[get("var1")]]得到的tibble列作爲載體。

reg_figure <- function(var1, var2, var3){ 
    test %>% select_(.dots=c(get("var1"), get("var2"), get("var3"), "Group")) %>% 
    mutate(y=create_y(.[[get("var1")]], .[[get("var2")]], .[[get("var3")]], Group)) 
} 
reg_figure("Q1", "Q2", "Q3")