2017-02-13 1 views
0

특정 데이터베이스 테이블에서 컬럼 이름을 가져 와서 다음 단계에서 새 데이터로 채울 오브젝트에 지정해야합니다.적용 루프로 for 루프를 바꾼 것은 개별 오브젝트 대신 목록의 리턴 된 목록

get_colNames_object <- function(x) { 

      sqltext <- paste0("dbGetQuery(poscon, \"SELECT column_name FROM information_schema.columns WHERE table_name=\'", x,"\' AND table_schema=\'my_schema\'\")") 

      result <- eval(parse(text = sqltext)) 

      result <- unname(result$column_name) 

      assign(x, result, envir = parent.frame()) 
      } 

이는 경우에 작동하는 것 같다 :

이 완벽하게 작동되는 코드는 (. PostgreSQL은을 사용하지만 사용자가 원하는 RBDMS 전년 동기 대비 사용할 수있는 것은이 문제는 데이터베이스 있지만 lapply의 적절한 사용하지 않습니다) 하나의 테이블로 함수 호출하기. lapply 호출 할 때

 get_colNames_object("customers") 

> customers 

    [1] "id"     "client_id"   "name"   "surname" 

는하지만 ..... 내가 개별 개체 대신 목록의 목록을 얻을 :

tablelist <- c("customers", "sales") 

lapply(tablelist, get_colNames_object) 

[[1]] 
[1] "id"     "client_id"   "name"   "surname"    

[[2]] 
[1] "id"     "product_id"   "price"  "client_id"  

이 작동하지 않습니다 왜 어떤 힌트 목적은이 방법을 확인 반환 나의 목록? 예상되는 결과는 열 이름과 관련된 많은 개체입니다. 스키마의 모든 테이블에 하나씩.

+0

캐서린이이 get_colNames_object ("고객") 다음 get_colNames_object를 호출 할 경우 ("판매") 환경에서 두 개의 객체를 얻습니다. 각 오브젝트는 테이블 이름이있는 오브젝트에 지정된 컬럼 이름 목록입니다. 예상 된 출력은 모든 테이블에 대한 개체입니다. – Forge

+3

이와 같이'eval (parse (...)) '을 사용하지 마십시오. 부작용이있는 함수를 작성하지 마십시오. – Roland

답변

1

나는 lapply 대신 간단한 루프를 제안합니다. 이 코드는 나를 위해 일한 :

for (t in tablelist) { 

    text_to_parse <- paste0(t ," <- get_colNames_object(\'",t,"\')") 

    eval(parse(text = text_to_parse)) 


} 
1

는 열 이름은 테이블을 직접 오티 조회 할 수 DBI의 기능 dbListFields있다. 내가 사용하는 방법에 대한 질문에 대한 dbListFields 도움말 페이지에서 예제를 확장 lapply

library(DBI) 
library(RSQLite) 

con <- dbConnect(RSQLite::SQLite(), ":memory:") 

dbWriteTable(con, "mtcars", mtcars) 
dbWriteTable(con, "mtcars2", mtcars) 

table_list <- list("mtcars", "mtcars2") 

t(sapply(table_list, dbListFields, conn = con)) 

결과 :

[,1]  [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11][,12] 
[1,] "row_names" "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" 
[2,] "row_names" "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" 
관련 문제