Size: a a a

R (язык программирования)

2021 January 05

АК

Артём Клевцов... in R (язык программирования)
Igor Yegin
Explain, please
Поиск переменной для присвоения происходит рекурсивно во всех родительских окружениях. Это может приводить к разным сложно отлаживаемым ситуациям.
источник

IS

Ivan Struzhkov in R (язык программирования)
Philipp Upravitelev
оно делает присвоение в другом окружении, это достаточно сложно контролировать
если так уж хочется, лучше использовать assign с указанием окружения
Есть такой вопрос, как разумнее решить вопрос, я хочу что бы функция создавала n обьектов в global env процессе выполнения.  Например 10 соединений к разным БД.

И без использования <<- единственный вариант который я вижу, это в список их накидать
источник

PU

Philipp Upravitelev in R (язык программирования)
Ivan Struzhkov
Есть такой вопрос, как разумнее решить вопрос, я хочу что бы функция создавала n обьектов в global env процессе выполнения.  Например 10 соединений к разным БД.

И без использования <<- единственный вариант который я вижу, это в список их накидать
я в целом не уверен, что это хорошая практика, n разных открытых соединений
не лучше ли будет создать функцию с аргументом выбора бд и аргументом запроса, которая используется при запросе? то есть, открывает соединение, импортирует данные, закрывает соединение
источник

IY

Igor Yegin in R (язык программирования)
Philipp Upravitelev
оно делает присвоение в другом окружении, это достаточно сложно контролировать
если так уж хочется, лучше использовать assign с указанием окружения
А, ясно. Просто я использовал <<- когда надо было вывести Монте-Карло-распределение аргумента из функции, и всё было нормально
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
Есть такой вопрос, как разумнее решить вопрос, я хочу что бы функция создавала n обьектов в global env процессе выполнения.  Например 10 соединений к разным БД.

И без использования <<- единственный вариант который я вижу, это в список их накидать
Что мешает создать пустое окружение без родителей и накидать туда через assign? Список, впрочем, тоже вариант.
источник

IS

Ivan Struzhkov in R (язык программирования)
Philipp Upravitelev
я в целом не уверен, что это хорошая практика, n разных открытых соединений
не лучше ли будет создать функцию с аргументом выбора бд и аргументом запроса, которая используется при запросе? то есть, открывает соединение, импортирует данные, закрывает соединение
Я могу заменить в исходном вопросе соединение на n моделей например ,

но для ясности поясню, по специфике организации хранения данных часто требуется одинаковые запросы выполнить во многих базах.

соотвествено я одной функцией создаю n коннектов, циклом перебираю запрос по базам. Одной функцией закрываю конект. На все дела от 3 строк кода, с произвольной оьработкой результата внутри цикла.

Альтернативой рассматривал одну функцию, которая будет в себя принимать запрос и выполнять его в указанных базах, но получалось не гибко и результаты надо было в лист пихать
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
Я могу заменить в исходном вопросе соединение на n моделей например ,

но для ясности поясню, по специфике организации хранения данных часто требуется одинаковые запросы выполнить во многих базах.

соотвествено я одной функцией создаю n коннектов, циклом перебираю запрос по базам. Одной функцией закрываю конект. На все дела от 3 строк кода, с произвольной оьработкой результата внутри цикла.

Альтернативой рассматривал одну функцию, которая будет в себя принимать запрос и выполнять его в указанных базах, но получалось не гибко и результаты надо было в лист пихать
Лучше всё же так не делать, а передавать параметры подключения в функцию, которая выполняет запрос и там открывать и закрывать. Хоть сейчас почти везде добавили финализаторы коннектов, которые выполняются при запуске сборщика мусора и к фатальным последствиям это не приведеёт, но практика всё равно не очень хорошая.
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
Что мешает создать пустое окружение без родителей и накидать туда через assign? Список, впрочем, тоже вариант.
ничего, но тогда видимо и в глобал можно накидать через assign. ? почему в отдельное окружение лучше?
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
ничего, но тогда видимо и в глобал можно накидать через assign. ? почему в отдельное окружение лучше?
Чтобы все сущности одного типа были в одном месте. Я стараюсь не загаживать глобальное окружение без резкой необходимости. Ещё и побочным эффектом из какой-то функции.
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
Лучше всё же так не делать, а передавать параметры подключения в функцию, которая выполняет запрос и там открывать и закрывать. Хоть сейчас почти везде добавили финализаторы коннектов, которые выполняются при запуске сборщика мусора и к фатальным последствиям это не приведеёт, но практика всё равно не очень хорошая.
Ну то есть идея в том, что бы циклом перебирать не коннекты, а параметры? звучит разумно
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
Ну то есть идея в том, что бы циклом перебирать не коннекты, а параметры? звучит разумно
Параметры можно положить в YAML/TOML/JSON и подгружать их по названию секции. Или же можно налепить файлы типа:
param=value
и подгружать их через readRenviron, которая импортнёт значения в качестве переменных окружения. Удобно для Postgres, т.к. libpq понимает переменные окружения с префиксом PG и параметры коннекта в коде в явном виде можно вообще не указывать.
источник

IS

Ivan Struzhkov in R (язык программирования)
давайте упростим. Хочу функцию , Которая мне возврашает N обьектов, например 5 моделей, от линейной регрессии до бустинга. Все в список пихать?
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
Параметры можно положить в YAML/TOML/JSON и подгружать их по названию секции. Или же можно налепить файлы типа:
param=value
и подгружать их через readRenviron, которая импортнёт значения в качестве переменных окружения. Удобно для Postgres, т.к. libpq понимает переменные окружения с префиксом PG и параметры коннекта в коде в явном виде можно вообще не указывать.
во, спасибо! то что нужно!
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
давайте упростим. Хочу функцию , Которая мне возврашает N обьектов, например 5 моделей, от линейной регрессии до бустинга. Все в список пихать?
Функция принимает параметр модель на вход. И через явный или скрытый цикл проходится, хоть с мониторингом, хоть с параллелизацией.
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
Функция принимает параметр модель на вход. И через явный или скрытый цикл проходится, хоть с мониторингом, хоть с параллелизацией.
а на выходе n обьектов через цикл?
источник

АК

Артём Клевцов... in R (язык программирования)
Ivan Struzhkov
а на выходе n обьектов через цикл?
На выходе 1 объект.
источник

IS

Ivan Struzhkov in R (язык программирования)
Артём Клевцов
На выходе 1 объект.
список из n моделей?
источник

АК

Артём Клевцов... in R (язык программирования)
Без контекста не очень понятно как лучше сделать и что именно нужно. Причём тут базы, модели...
источник

АК

Артём Клевцов... in R (язык программирования)
Я придерживаюсь мнения, что функция (как процедура) должно делать что-то одно, но понятным образом. Усложнения можно городить, конечно, но на нижнем уровне должны быть функции, принимающие минимум параметров и возвращающие простые объекты.
источник

IS

Ivan Struzhkov in R (язык программирования)
вопрос один простой. Хочу функцию которая создаст N обьектов. Например на вход датасет, на выход - линейная регрессия, градиентный бустинг, случайный лес.

Вопрос, как мне без использования <<- получить эти обьекты в глобал энв.
источник