Необходимо получить имена столбцов из конкретной таблицы базы данных и назначить объектам, которые будут заполнены новыми данными на следующем шаге.заменяя цикл, применяя вызов, возвращенный список списков вместо отдельных объектов.
(. С использованием PostgreSQL, но вы можете использовать год-RBDMS предпочитают вопрос не базы данных, но правильное использование lapply)
Это прекрасно работает код:
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())
}
это похоже на работу, если вам сделать вызов функции с одной таблицей. Объект возвращается в порядке таким образом:
get_colNames_object("customers")
> customers
[1] "id" "client_id" "name" "surname"
Но ..... при вызове lapply я получаю список списков вместо отдельных объектов:
tablelist <- c("customers", "sales")
lapply(tablelist, get_colNames_object)
[[1]]
[1] "id" "client_id" "name" "surname"
[[2]]
[1] "id" "product_id" "price" "client_id"
любой намек, почему это не работает с мой список? Ожидаемый результат - это куча объектов, относящихся к именам столбцов. Один для каждой таблицы в схеме.
Cath если вы сделаете этот призыв get_colNames_object («клиенты»), а затем get_colNames_object («продажа») вы получаете два объекта в среде. Каждый объект представляет собой список имен столбцов, назначенных объекту с именем таблицы на нем. Ожидаемый результат - это объект для каждой таблицы. – Forge
Никогда не используйте 'eval (parse (...))' как это. И не записывайте функции с побочными эффектами. – Roland