2017-12-01 4 views
0

나는 루프하고 특정 변수를 병합해야하는 데이터 프레임을 가지고 있습니다.R 목록에서 이름 목록을 선택하십시오.

내가 같은 배열 내 모든 목록에 이름을 넣어려고 :

list_names <- c('list1','list2','list3') 

그리고 수행하는 sapply :

output <- sapply(list_names, function(x) rbind(main list, 
    select(as.name(x), col1, col2, col3, col4))) 

내가으로 실행 fisrt 오류는 다음과 같습니다

Error in UseMethod("select_") : 
    no applicable method for 'select_' applied to an object of class "character" 

select 문이 내가 전달하는 것을 좋아하지 않는다고 생각합니다. x 변수 이름이 아닙니다. x가 변수 이름이라고 말할 수있는 방법이 있습니까? 나는 as.name(x)이 이것을 할 것이라고 생각했다.

감사

답변

1

당신은 열 이름 데이터를 검색 get, 시도 할 수 있습니다 :

재현 예 :

library(dplyr) 

list_names = c("mtcars", "mtcars") 

lapply(list_names, function(x) rbind(mtcars[1:3], select(get(x), mpg, cyl, disp))) 

는 또 다른 방법은 각 list_namessym에 변환하는 것 (에서 rlang) select을 호출 할 때 평가 해주세요.

library(rlang) 

lapply(list_names, function(x) rbind(mtcars[1:3], select(eval_tidy(sym(x)), mpg, cyl, disp))) 

자료 R의 등가 :

lapply(list_names, function(x) rbind(mtcars[1:3], select(eval(as.name(x)), mpg, cyl, disp))) 

OP의 예 :

output <- lapply(list_names, function(x) rbind(main_list, 
    select(get(x), col1, col2, col3, col4))) 

나 :

output <- lapply(list_names, function(x) rbind(main_list, 
    select(eval(as.name(x)), col1, col2, col3, col4)))