2016-08-24 12 views
5

Próbuję programowo przekazać nazwy kolumn do funkcji, aby można je było wybrać w dplyr. Nazwy kolumn będą się różnić, więc próbowałem użyć standardowej wersji testowej funkcji wyboru select_. Same nazwy kolumn są nieco zabawne, ponieważ zawierają one znaki + i -, co moim zdaniem powoduje problem. Poniżej znajduje się prosty przykład, który replikuje błąd.jak przekazywać nazwy kolumn w dplyr select bez oceny

library(tibble) 
library(dplyr) 
data <- data_frame(target_id = 'xyz', 
        `CH4+Sulfate-1` = 1.2, 
        `CH4+Sulfate-2` = 2, 
        `CH4+Sulfate-3` = 3) 
columns <- c('CH4+Sulfate-1', 'CH4+Sulfate-2', 'CH4+Sulfate-3') 
select_(data, .dots = columns) 

pojawia się następujący błąd

Error in eval(expr, envir, enclos) : object 'CH4' not found 

co prowadzi mnie do przypuszczenia, że ​​nazwy są oceniane zamiast traktować jako ciąg. Jak mogę obejść ten problem bez konieczności zmiany nazwy kolumn tabeli?

+1

Hmmm .... dobre pytanie - "dane [kolumny]" z bazy R działa dobrze, więc nie jest to problem uniwersalny. Możesz także sieknąć wokół niego za pomocą 'dplyr :: select (dane, dopasowanie (kolumny, nazwy (dane))), ale nie mam innego pomysłu. – thelatemail

+2

Absolutnie minimalny przykład wystarczy, aby go złamać - 'dat <- data.frame (\' A + B \ '= 1: 3, check.names = FALSE); select_ (dat, "A + B") ' – thelatemail

+0

Wygląda na to, że' jeden_of' z 'select' może być odpowiedzią w tych [rodzajach sytuacji] (http://stackoverflow.com/questions/35839408/r-dplyr- drop-multiple-columns/35839679 # 35839679): 'select (data, one_of (columns))' – aosmith

Odpowiedz

2

Zawijanie nazwisk w odciski tylne wykonuje zadanie.

columns <- c('`CH4+Sulfate-1`', '`CH4+Sulfate-2`', '`CH4+Sulfate-3`') 
Powiązane problemy