Размышление в векторах с R

Я бы рекомендовал использовать PDO (объекты данных PHP) для запуска параметризованных SQL-запросов.

Это не только защищает от SQL-инъекции, но и ускоряет выполнение запросов.

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

25
задан Hack-R 8 September 2016 в 02:44
поделиться

2 ответа

Очевидно я должен был работать над этим в течение другого часа, прежде чем я отправил свой вопрос. Это настолько очевидно ретроспективно.:)

Для использования логики вектора R я вынул цикл и заменил его этим:

st <-   sample(c(12,17,24),10000,prob=c(20,30,50),replace=TRUE)
p1 <-   sample(c(12,17,24),10000,prob=c(20,30,50),replace=TRUE)
p2 <-   sample(c(12,17,24),10000,prob=c(20,30,50),replace=TRUE)
year <- rep(1991:2000,1000)

я могу теперь сделать 100 000 образцов, почти мгновенных. Я знал, что векторы были быстрее, но блин. Я предполагаю, что 100 000 циклов приняли бы час с помощью цикла, и векторный подход берет < 1 секунда. Только для ударов я сделал векторы миллионом. Потребовалось ~2 секунды для завершения. Так как я должен протестировать к отказу, я попробовал 10 мм, но закончился память на моем ноутбуке на 2 ГБ. Я переключился на свой рабочий стол Vista 64 с поршнем на 6 ГБ и создал векторы длины 10 мм за 17 секунд. 100 мм заставили вещи развалиться, поскольку один из векторов составлял более чем 763 МБ, которые привели к проблеме выделения с R.

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

8
ответ дан JD Long 28 November 2019 в 21:58
поделиться

Для ответа на вопрос о том, почему цикл 10 000 взял намного дольше, чем цикл 1 000:

я думаю, что основной подозреваемый является конкатенациями, которые происходят каждый цикл. Поскольку данные добираются, более длинный R, вероятно, копирует каждый элемент вектора в новый вектор, который является одним дольше. При копировании маленького (500 элементов в среднем) набор данных 1000 раз быстр. При копировании большего (5 000 элементов в среднем) набор данных 10000 раз медленнее.

6
ответ дан David Locke 28 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: