|
|
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
Добрый день! познаю R! для узкой задачи. моя таблица [MYtable] вида [idclient], [iddog], [ead] может содержать более одного договора [iddog] на клиента [idclient]. и это очень жаль, потому что я хочу нагенерить случайные числа таким образом, что бы они были одинаковыми для всех договоров, принадлежащих одному клиенту. Ничего лучше, чем извлекать уникальные номера клиентов, генерить для них рандомы а потом сливать в основной массив я не придумал! таким образом, из основной таблицы рождается временная [tatemp], а потом уже из [tatemp] и [MYtable] рождается [tatemp2], которой я дальше и пользуюсь. Код: vbnet 1. 2. 3. как сделать быстрее и проще? Мб какой-нить apply? Я никак не вкурю как его юзать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 19:34 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
Может лучше SQL изучить? Диалект используемого SQL сервера. Этими средствами гораздо быстрее будет работать, чем гонять данные между БД и клиентом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 20:10 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
PlanB, простое решение не генерировать случайных чисел, а использовать seed, можно написать функцию, которая будет выдавать псевдослучайное значение в зависимости от id fake_random <- function(id){ set.seed(id) return( runif() ) } =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 21:56 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblab пропустила 1 в runif fake_random <- function(id){ set.seed(id) return( runif(1) ) } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 21:59 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
Dima TМожет лучше SQL изучить?на уровне данной задачи я знаю sql. нужен r по ряду причин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:00 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabmini.weblab пропустила 1 в runif fake_random <- function(id){ set.seed(id) return( runif(1) ) }решение с сидом я обдумывал, но не катит в текущей интерпретации. далее мне нужно провести N=100000 итераций генерации таких рандомов. а с заданным сидом они все будут одинаковые. хотя можно же задавать set.seed(id+i), где i in 1:100000. слушайте, а не плохо. че я не додумался. есть у сида ограничения по длине числа? айдишники здоровенные... 90 триллионов максимальный пока =)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:04 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabmini.weblab пропустила 1 в runif fake_random <- function(id){ set.seed(id) return( runif(1) ) }все бы здорово, но я не понял как вызвать функцию так что бы на выходе был вектор. или надо ее прогонять через цикл по каждой строке (каждому id)? тогда это имхо еще дольше, чем через merge ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:45 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
PlanB, 1) чтобы выходе был вектор на входе подаем вектор и используем ?sapply 2) я не верю, что с merge будет эффективней =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 12:54 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabPlanB, 1) чтобы выходе был вектор на входе подаем вектор и используем ?sapply 2) я не верю, что с merge будет эффективней =) Вариант 1 Код: vbnet 1. 2. 3. 4. 5. 6. прошло 1.93 Вариант 2 Код: vbnet 1. 2. 3. прошло 0.97 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 13:24 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabя не верю, что с merge будет эффективней =)можно распараллелить как-то. но, имхо, это уже перебор. должно быть проще решение. ЗЫ у меня еще один затык - вложенные условия. их дохрена и больше. можно как-то увеличить скорость на коде, представленном ниже? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 13:28 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
PlanB, так Дима уже ответил: подготовку данных для анализа лучше производить в БД но если очень хочется это сделать в R, то можно почитать https://www.packtpub.com/application-development/r-data-structures-and-algorithms (но я бы на это не подписалась) =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 14:35 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabPlanB, так Дима уже ответил: подготовку данных для анализа лучше производить в БД но если очень хочется это сделать в R, то можно почитать https://www.packtpub.com/application-development/r-data-structures-and-algorithms (но я бы на это не подписалась) =)у меня монте-карло с моделированием 100к+ экспериментов. недостаток sql - посредственный встроенный рандом. недостаток r, как теперь выясняется - медленная работа. а я так верил в векторизацию! жаль нескольких потраченных дней на его изучение... не сомневаюсь, что в sql линковаться таблицы будут быстрее. а что, встроенные условия (elseif) будут тоже быстрее отрабатывать? я чет не верю =((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 15:32 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabя не верю, что с merge будет эффективней =) a) в случае генерации псевдослучайного числа - цена алгоритма O(n) b) насколько я знаю в случае с merge данные должны быть предварительно отсортированны по id, т.е. теоретически только для сортировки цена алгоритма >= O( n*log(n) ) > O(n) PlanB, 1) в случае перехода с R на что-нибудь еще, основные проблемы обычно возникают с переписыванием функций типа tatemp2$prov_calcstress_p 2) недостаток sql - посредственный встроенный рандом Вы генерируете число из равномерного распределения, имхо, здесь проблем быть не должно. 3) еще аргумент за использование БД: случае использования БД расчеты будут выполняться на БД сервере =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 16:17 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblab3) еще аргумент за использование БД: случае использования БД расчеты будут выполняться на БД сервере =)три раза ха! на sql экспресс они будут выполняться на моей машине... кто мне место на сервере-то даст... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 16:46 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabmini.weblabя не верю, что с merge будет эффективней =) a) в случае генерации псевдослучайного числа - цена алгоритма O(n) b) насколько я знаю в случае с merge данные должны быть предварительно отсортированны по id, т.е. теоретически только для сортировки цена алгоритма >= O( n*log(n) ) > O(n)ок, вполне допускаю, что я мыслю не категориями стат языка R! и изначально свою задачу решаю некорректными методами. Мне нужно всего-навсего выбрать 25% уникальных записей в [idclient] (и все соответствующие им [iddog]) и просуммировать поле [ead]. Сделать это нужно N=10000 раз и в каждой итерации выборка 25% будет разной. Я решаю это при помощи генерации псевдослучайных числел и последующего их сравнения с 0,25. возможно, есть более простой способ? (например, в SPSS он есть, а в R я хз) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 18:22 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
PlanB, 1) можно создать таблицу из уникальных id клиентов 2) использовать функцию sample для выборки 25% id (?sample) 3) и просуммировать то что вам нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 19:09 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblabPlanB, 1) можно создать таблицу из уникальных id клиентов 2) использовать функцию sample для выборки 25% id (?sample) 3) и просуммировать то что вам нужномне нужно выбрать еще и все [iddog], соответствующие [idclient]. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 19:57 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
PlanB, использовать merge =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 22:03 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
PlanB, в R я обычно работаю с данными сравнительно небольшого объема использую пакет sqldf решение будет работать немного медленне чем при использовании merge, но зато будет логичным, понятным и легко читаемым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 00:17 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblab, спасибо за ответы! тему можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 08:56 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
в итоге вот оптимизация. не шибко большая. что вычитал, то и буду использовать Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 16:14 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
PlanB, а сколько у вас уникальных id клиентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 21:44 |
|
||
|
генерация случайных чисел в R! по условию
|
|||
|---|---|---|---|
|
#18+
mini.weblab, дело в том, что у меня функция с seed в среднем выдает 10с на последовательность от 1 до 1000000 быстрее всего отрабатывает sample 0.016c на последовательность от 1 до 1000000 это результаты только для выборок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 22:52 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39478697&tid=1340352]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
138ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 426ms |

| 0 / 0 |
