Содержание

c — Запись в файл. fwrite() fread();

fread/fwrite функции читают/пишут данные в бинарном формате. Если хочется человеко-читаемый (текстовый) формат, то можно использовать fscanf/fprintf вместо fread/fwrite соответственно.

Приведённый в вопросе код должен работать как есть.

Что конкретно fwrite запишет на диск, может зависеть от платформы (размер типа (LLP64, LP64 модели), порядок байтов, и даже побитовое представление типов (дополнительный код, обратный код), выравнивание типов).

Например, если файл скопировать на другую платформу, то не обязательно что fread сможет его прочитать корректно.

На моей машине test файл содержит:

$ xxd test
0000000: f628 5c8f c275 2840 6500 0000 8fe0 0100  .(\..u(@e.......
0000010: 0000 0000                                ....

Первая колонка, нумерует байты, в каждой строке по 16 байт, представленных командой xxd ввиде шестнадцатеричных чисел (каждые две цифры соответствуют одному байту).

Самая правая колонка показывает печатаемые байты (точка используется для непечатаемых в ascii символов).

Вот байты соответствующие каждому значению:

  d  f628 5c8f c275 2840
  i  6500 0000
  l  8fe0 0100 0000 0000

Можно сразу сказать, что int является 32-битным типом (4 байта, предполагая 1 байт = 8 бит), а long 64-битным типом (что верно для lp64 модели) с порядком байтов от младшего с старшему (little-endian) на моей машине.

Если записать байты для i и l в порядке от старшего к младшему (big-endian) как обычно числа записаны на бумаге пишут:

  • int i 00000065 в шестнадцатеричной системе соответствует 101
    в десятичной системе(6516 = 10110), что является корректным значением для i
  • long l 000000000001e08f в шестнадцатеричной системе соответствует 123023 в десятичной системе (1e08f16 = 12302310), что также верно.

Число d записано как число двойной точности в IEEE 754 формате —
d = ±знак · (1 + мантисса / 252) · 2порядок − 1023:

d  402875c28f5c28f6

(cнова переписал байты от старшего к младшему) Или в двоичной системе — все 64 бита числа

d:

d 0100000000101000011101011100001010001111010111000010100011110110

Самый левый бит это знак, в данном случае он 0, то есть d является положительным, затем 11 бит порядок = 100000000102 = 102610, оставшиеся 52 бита мантисса:

1000011101011100001010001111010111000010100011110112
= 238127830297215010
= 875c28f5c28f616

Всё вместе:

d = (1 + 2381278302972150 / 252) · 21026 − 1023
= 3442438965171323 / 281474976710656
= 12.23

12.23 также верным значением является.

Встроенная ОС, поддержка и услуги | ОСРВ, гипервизор

Запускайте критически важные встраиваемые системы быстрее с помощью нашей коммерческой ОСРВ, гипервизора, средств разработки и услуг.

БЕСПЛАТНАЯ 30-ДНЕВНАЯ ПРОБНАЯ ВЕРСИЯ ПОГОВОРИ С НАМИ

Встроенные системы, которым доверяют везде

Наша операционная система реального времени (RTOS), гипервизор и промежуточное ПО обеспечивают производительность и безопасность, а также упрощают сертификацию безопасности. Мы являемся предпочтительной встроенной ОС для транспортных средств, вентиляторов, систем управления поездами, систем автоматизации производства, медицинских роботов и многого другого.

Нам доверяют OEM-производители и компании первого уровня по всему миру, и сейчас мы работаем с более чем 215 миллионами автомобилей.

Мы создаем надежное и безопасное встроенное системное программное обеспечение с 1980 года.

ПОСМОТРЕТЬ ПОРТФОЛИО НАШЕЙ ПРОДУКЦИИ

Все, что вам нужно для создания лучших встраиваемых систем

Если вы хотите повысить уровень безопасности или упростить процесс кроссплатформенной разработки, мы можем помочь.

Мы можем воплотить ваши планы в жизнь с помощью RTOS и гипервизора , специально созданного для встраиваемых систем, включая предварительно сертифицированные варианты продукта. Наша модульная микроядерная архитектура обеспечивает безопасность и надежность и позволяет избежать дублирования усилий по разработке ОС для нескольких продуктов. Мы предоставляем поддерживает на каждом этапе жизненного цикла продукта и предлагает профессиональные услуги и обучение , чтобы предоставить вам дополнительные знания, которые вам нужны, когда они вам нужны.

  • Программное обеспечение
  • Поддерживать
  • Профессиональные услуги

Программное обеспечение

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

 Мы предлагаем:

  • Продукты Foundation
    , включая QNX ® Neutrino ® RTOS, QNX ® ® платформу разработки программного обеспечения (SDP) Гипервизор
  • Сертифицированы по безопасности Варианты нашей продукции, ускоряющие процесс сертификации
  • Решения для обеспечения безопасности , включая безопасные беспроводные обновления и BlackBerry® Jarvis®, наше уникальное решение для анализа двоичных файлов
  • Промежуточное ПО для ускорения разработки и ускорения выхода на рынок

Узнать больше

Поддержка

Для успеха вам нужно больше, чем программное обеспечение. Вам нужен партнер, который знает, что работа не сделана, пока вы не приступите к работе.

Мы предлагаем:

  • Различные пакеты поддержки и технические консультации от разработчиков, инженеров и архитекторов
  • Лучший в своем классе продукт Документация, дополненная нашей базой знаний
  • Пакеты поддержки плат для широкого спектра процессоров ARM и x86

Варианты поддержки

Профессиональные услуги

Если вам нужно расширить свою команду, запустить проект или сертифицировать свои продукты, вы можете положиться на наших экспертов по встраиваемым системам и ОС, которые предоставят необходимые вам знания и опыт.

Мы предлагаем:

  • Услуги по обеспечению безопасности и решения для анализа двоичного кода
  • Индивидуальная разработка
  • Услуги по обеспечению безопасности , которые помогут вам получить сертификаты IEC 61508, ISO 26262, IEC 62304 и EN 5012X
  • Учебные курсы , разработанные и проводимые экспертами в области функциональной безопасности и разработки встроенного программного обеспечения

Узнать больше

  • Программное обеспечение

    Программное обеспечение

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

     Мы предлагаем:

    • Продукты Foundation , включая QNX ® Neutrino ® RTOS, QNX ® платформу разработки программного обеспечения (SDP) и платформу разработки программного обеспечения (SDP) с поддержкой POSIX0054 ®
      Гипервизор
    • Сертифицированы по безопасности Варианты нашей продукции, ускоряющие процесс сертификации
    • Решения для обеспечения безопасности , включая безопасные беспроводные обновления и BlackBerry® Jarvis®, наше уникальное решение для анализа двоичных файлов
    • Промежуточное ПО для ускорения разработки и ускорения выхода на рынок

    Узнать больше

  • Поддержка

    Поддержка

    Для успеха вам нужно больше, чем программное обеспечение.

    Вам нужен партнер, который знает, что работа не сделана, пока вы не приступите к работе.

    Мы предлагаем:

    • Различные пакеты поддержки и технические консультации от разработчиков, инженеров и архитекторов
    • Лучший в своем классе продукт Документация, дополненная нашей базой знаний
    • Пакеты поддержки плат для широкого спектра процессоров ARM и x86

    Варианты поддержки

  • Профессиональные услуги

    Профессиональные услуги

    Если вам нужно расширить свою команду, запустить проект или сертифицировать свои продукты, вы можете положиться на наших экспертов по встраиваемым системам и ОС, которые предоставят вам необходимые знания и опыт.

    Мы предлагаем:

    • Услуги по обеспечению безопасности и решения для анализа двоичного кода
    • Индивидуальная разработка
    • Услуги по обеспечению безопасности , которые помогут вам получить сертификаты IEC 61508, ISO 26262, IEC 62304 и EN 5012X
    • Учебные курсы , разработанные и проводимые экспертами в области функциональной безопасности и разработки встроенного программного обеспечения

    Узнать больше

Почему стоит выбрать BlackBerry QNX Services

Безопасность

Ускорьте вывод на рынок программного обеспечения, предварительно сертифицированного по IEC 61508, ISO 26262 и IEC 62304, обучения QNX® по функциональной безопасности и услуг по обеспечению безопасности.

Безопасность

Благодаря микроядерной архитектуре наша ОСРВ и гипервизор защищены по своей конструкции. Положитесь на наших проверенных экспертов по кибербезопасности, которые помогут защитить ваши системы.

Масштабируемость

Наша полностью управляемая ОСРВ с микроядром может использоваться во всех линейках продуктов, поэтому ваши разработчики могут сосредоточиться на дополнительных функциях, а не на обслуживании ОС.

Надежность

Архитектура микроядра QNX защищает ОС и систему от сбоев компонентов и обеспечивает исключительную производительность.

Где мы помогаем

У нас есть опыт в области программного обеспечения и решения, которые отвечают уникальным потребностям OEM-производителей и производителей в этих отраслях.

Подключенные и автономные транспортные средства

Оптимизируйте разработку безопасных и защищенных автомобильных систем с помощью нашего программного обеспечения, промежуточного программного обеспечения и услуг, включая нашу ОС, предварительно сертифицированную по стандарту ISO 26262.

Узнать больше

Робототехника и автоматизация

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

Узнать больше

Операционная система для медицинских устройств

Убедитесь, что ваши медицинские устройства безопасны, защищены и надежны на протяжении всего жизненного цикла продукта.

Узнать больше

Операционная система реального времени для железнодорожных систем

Соответствие сложным нормативным требованиям, повышение надежности и сокращение времени разработки ваших критически важных для безопасности железнодорожных систем.

Узнать больше

Операционная система для тяжелого машиностроения

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

Узнать больше

Операционная система реального времени для промышленных систем управления

Решите уникальные проблемы безопасности, защиты и производительности, которые могут возникнуть при разработке систем промышленного Интернета вещей (IIoT).

Узнать больше

Встроенная ОС для аэрокосмической и оборонной промышленности

Упростите разработку и обеспечьте надежность ваших безопасных, функционально безопасных встроенных аэрокосмических и оборонных систем.

Узнать больше

Программное обеспечение для коммерческого транспорта

Упростите сертификацию безопасности по ISO 26262, обеспечьте доступность и укрепите безопасность с помощью программных решений, поддерживающих адаптивную платформу AUTOSAR.

Узнать больше

Узнать больше

Ресурсы

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

Посетите ресурсный центр

Сертификаты

См. список предварительно сертифицированных продуктов и продуктов, подлежащих сертификации безопасности.

Узнать больше

Служба поддержки

Получите помощь через наш онлайн-портал, личные линии помощи, портал сообщества, базу знаний и многое другое.

Посетите службу поддержки

BSP

Поиск в нашей библиотеке пакетов поддержки плат (BSP) по поставщику микросхем, названию платы или имени BSP.

Найдите свой BSP

Предстоящие События
  • Предстоящие события
  • Embedded World в Нюрнберге — 14–16 марта
  • India TECHFORUM в Бангалоре — 29 марта
  • Зарегистрируйтесь на мероприятие или зарегистрируйтесь и присоединяйтесь к нам на вебинаре.

|

БЮЛЛЕТЕНЬ НОВОСТЕЙ

Мероприятие, встроенные системы

Embedded World в Нюрнберге — 14–16 марта

Зарегистрироваться

Мероприятие, встроенные системы

Индия TECHFORUM в Бангалоре — 29 марта

Зарегистрироваться

Мероприятия и вебинары BlackBerry QNX

Зарегистрируйтесь для участия в мероприятии или зарегистрируйтесь и присоединяйтесь к нам для участия в вебинаре.

См. Расписание

Функция fwrite — RDocumentation

Описание

Как write.csv , но намного быстрее (например, 2 секунды против 1 минуты) и такая же гибкая. Современные машины почти наверняка имеют более одного ЦП, поэтому fwrite использует их; на всех операционных системах, включая Linux, Mac и Windows.

Использование

 fwrite(x, file = "", append = FALSE, quote = "auto",
  sep = ",", sep2 = c("","|",""),
  eol = if (.Platform$OS.type=="windows") "\r\n" else "\n",
  na = "", dec = ".", row.names = FALSE, col.names = TRUE,
  qmethod = c ("двойной", "побег"),
  logical01 = getOption("datatable.logical01", FALSE), # из-за изменения на TRUE; см. НОВОСТИ
  logicalAsInt = logical01, # устарело
  scipen = getOption('scipen', 0L),
  dateTimeAs = c ("ISO", "сквош", "эпоха", "write.csv"),
  buffMB = 8L, nThread = getDTthreads (подробный),
  showProgress = getOption ("datatable. showProgress", интерактивный()),
  сжать = c("авто", "нет", "gzip"),
  ямл = ЛОЖЬ,
  Бом = ЛОЖЬ,
  verbose = getOption("datatable.verbose", FALSE)) 

Аргументы

x

Любой список векторов одинаковой длины; например data.frame и data.table . Если матрица , она внутренне приводится к data.table с сохранением имен столбцов, но не имен строк

файла

Имя выходного файла. "" указывает вывод на консоль.

добавить

Если TRUE , файл открывается в режиме добавления и имена столбцов (строка заголовка) не записываются.

цитата

Когда "auto" , символьные поля, поля факторов и имена столбцов будут заключаться в двойные кавычки только тогда, когда это необходимо; то есть, когда поле содержит разделитель sep , строку, заканчивающуюся \n , саму двойную кавычку или (когда list столбцы присутствуют) sep2[2] (см. sep2 ниже). Если FALSE , поля не заключены в кавычки, даже если это нарушит CSV из-за содержимого поля. Если TRUE двойные кавычки всегда включаются, за исключением числовых полей, как write.csv .

сен

Разделитель между столбцами. По умолчанию "," .

сен2

Для столбцов типа список , где каждый элемент является атомарным вектором, sep2 управляет разделением элементов внутри столбца. sep2[1] записывается в начале поля вывода, sep2[2] помещается между каждым элементом, а sep2[3] пишется в конце. sep2[1] и sep2[3] могут быть строками любой длины, включая пустые "" (по умолчанию). sep2[2] должен быть одним символом и (когда список содержит столбцы и, следовательно, используется sep2 ) отличается как от sep , так и от dec . Значение по умолчанию ( | ) выбрано для визуального отличия от значения по умолчанию sep . В разговоре, письме и в комментариях к коду мы можем ссылаться на sep2[2] просто «sep2».

эол

Разделитель строк. По умолчанию "\r\n" для Windows и "\n" в противном случае.

нет данных

Строка, используемая для отсутствующих значений в данных. По умолчанию это пустая строка "" .

дек

Десятичный разделитель, по умолчанию "." . См. ссылку в ссылках. Не может совпадать с сен .

имена строк

Следует ли записывать имена строк? Для совместимости с data.frame и write.csv , поскольку data.table никогда не имеет имен строк. Следовательно, по умолчанию FALSE в отличие от write.csv .

имена столбцов

Следует ли записывать имена столбцов (строка заголовка)? По умолчанию TRUE для новых файлов и при перезаписи существующих файлов ( append=FALSE ). В противном случае по умолчанию используется значение FALSE , чтобы имена столбцов не появлялись снова в середине файла при размещении набора из 9 столбцов.0381 data.table s или добавление строк в конец файла.

Qметод

Строка символов, указывающая, как поступать со встроенными символами двойных кавычек при заключении строк в кавычки.

  • «escape» — символ кавычки (а также символ обратной косой черты) экранируется в стиле C обратной косой чертой, или

  • «двойная» (по умолчанию, такая же, как write.csv ), и в этом случае двойная кавычка удваивается с другой.

логический 01

Должны ли логические значения быть записаны как 1 и 0 вместо "ИСТИНА" и "ЛОЖЬ" ?

логический AsInt

Устарело. Старое название для `logical01`. Изменение имени для согласованности с `fread`, для которого `logicalAsInt` не имеет смысла.

научный

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

ДатаВремяКак

Как записываются элементы Date / IDate , ITime и POSIXct .

  • «ISO» (по умолчанию) — 2016-09-12 , 18:12:16 и 2016-09-12T18:12:16.999999Z . 0, 3 или 6 цифр доли секунды печатаются, если и когда они присутствуют для удобства, независимо от любых опций R, таких как digits.secs . Идея заключается в том, что если присутствуют милли и микросекунды, вы, скорее всего, захотите их сохранить. Внутреннее представление R в формате UTC написано верно, чтобы поощрять стандарты ISO, устранять двусмысленность часовых поясов и обеспечивать скорость. Можно рассмотреть вариант запуска R в часовом поясе UTC просто с "$ TZ='UTC' R" в оболочке (примечание: между TZ='UTC' и R должен быть один или несколько пробелов, все остальное будет молча игнорироваться; этот параметр TZ применяется только к этот процесс R) или Sys. setenv(TZ='UTC') в приглашении R, а затем продолжить, как если бы UTC было местным временем.

  • «кабачок» — 20160912 , 181216 и 20160912181216999 . Эта опция позволяет быстро и просто извлечь yyyy , мм , дд и (чаще всего для группировки) ггггмм частей с использованием целочисленных операций div и mod. Например, в R однострочные вспомогательные функции могут использовать %/%10000 , %/%100%%100 , %%100 и %/%100 соответственно. POSIXct UTC сжимается до 17 цифр (включая 3 цифры миллисекунд всегда, даже если 000 ), что удобно читать как integer64 (автоматически с помощью fread() ).

  • «эпоха» — 17056 , 65536 и 1473703936.999999 . Базовое количество дней или секунд, прошедших с соответствующей эпохи (1970-01-01, 00:00:00 и 1970-01-01T00:00:00Z соответственно), отрицательное до этого (см. ?Date ). 0, 3 или 6 цифр доли секунды печатаются, если они присутствуют.

  • «write.csv» — в настоящее время влияет только на POSIXct . Он записывается так же, как write.csv , используя as.character метод, который учитывает digits.secs и преобразует внутреннее представление R в формате UTC обратно в местное время (или атрибут "tzone" ) на эту историческую дату. Соответственно, это может быть медленным. Все другие типы столбцов (включая Date , IDate и ITime , которые не зависят от часового пояса) записываются как опция «ISO» с использованием быстрого кода C, который уже совместим с write.csv .

Первые три варианта работают быстро из-за нового специализированного кода C. Для преобразования эпохи в часть даты используется быстрый подход Говарда Хиннанта (см. Ссылки), использующий день года, начинающийся 1 марта. Вы не должны заметить никакой разницы в скорости записи между этими тремя вариантами. Диапазон дат, поддерживаемый для Date и IDate : [0000-03-01, 9999-12-31]. Каждая из этих 3 652 365 дат была протестирована и сравнена с базовой R, включая все 2 790 високосных дней в этом диапазоне.

Этот параметр также применяется к векторам даты/времени в ячейках столбца списка.

Строка полностью гибкого формата (например, "%m/%d/%Y" ) не поддерживается. Это сделано для поощрения использования стандартов ISO и потому, что эта гибкость неизвестна, как сделать быстро на уровне C. При необходимости мы можем поддерживать еще один или два конкретных варианта.

баффMB

Размер буфера (МБ) на поток в диапазоне от 1 до 1024, по умолчанию 8 МБ. Поэкспериментируйте, чтобы увидеть, что лучше всего подходит для ваших данных на вашем оборудовании.

nThread

Количество используемых потоков. Поэкспериментируйте, чтобы увидеть, что лучше всего подходит для ваших данных на вашем оборудовании.

шоуПрогресс

Отображать индикатор выполнения на консоли? Игнорируется, когда файл=="" .

компресс

Если сжатие = "авто" и если файл заканчивается на .gz , то формат вывода — gzip csv иначе csv. Если compress = "none" , формат вывода всегда CSV. Если сжатие = "gzip" тогда формат gzip csv. Вывод на консоль никогда не сжимается, даже если compress = "gzip" . По умолчанию сжатие = "авто" .

ямл

Если TRUE , fwrite выведет файл CSVY, то есть файл CSV с метаданными, хранящимися в виде заголовка YAML, с использованием as.yaml . См. Подробнее .

бом

Если TRUE , в начало файла добавляется последовательность BOM (знак порядка байтов) (EF BB BF); формат «UTF-8 со спецификацией».

подробный

Болтать и сообщать время?

Details

fwrite начался как вклад сообщества с запросом на включение № 1613 от Otto Seiskari. Это дало Мэтту Доулу толчок к специализации числового форматирования и распараллеливанию: https://h3o.ai/blog/fast-csv-writing-for-r/. Окончательные элементы были отслежены в выпуске № 1664, такие как автоматическое цитирование, поддержка bit64::integer64 , десятичное/научное форматирование, точно соответствующее write.csv между 2.225074e-308 и 1.797693e+308 до 15 значащих цифр, row.names , даты (между 0000-03-01 и 9999-12-31), время и sep2 для списка столбца, где каждая ячейка сама может быть вектором.

Для экономии места fwrite предпочитает записывать расширенные числовые значения в экспоненциальном представлении — например, . 10000000000 занимает гораздо больше места, чем 1e+10 . Большинство программ для чтения файлов (например, fread ) понимают экспоненциальную нотацию, поэтому потери точности нет. Как и в базовой R, пользователи могут управлять этим, указав scipen аргумент, который следует тем же правилам, что и options('scipen') . fwrite увидит, сколько места займет значение для записи в научном и десятичном представлении, и будет писать в экспоненциальном представлении только в том случае, если последнее больше, чем scipen символа шире. Тогда для 10000000000 1e+10 будет записано всякий раз, когда scipen<6 .

Поддержка CSVY:

Следующие поля будут записаны в заголовок файла и окружены --- сверху и снизу:

  • источник — содержит версию R и версию data.table , используемую для записи файла

  • create_time_utc — Текущая метка времени в формате UTC непосредственно перед записью заголовка

  • схема с элементами полей дающая имя - тип ( класс ) пары для таблицы; многоклассовые объекты (например, c('POSIXct', 'POSIXt') ) будет написан их первый класс.

  • заголовок - то же, что и col.names (который является заголовком на входе)

  • сен

  • сент2

  • эол

  • нет.строки - то же, что и нет

  • дек

  • Qметод

  • логический01

Ссылки

https://howardhinnant.github.io/date_algorithms.html
https://en.wikipedia.org/wiki/Decimal_mark

См. также

setDTthreads , , write.table , bit64::integer64

Примеры

Запустите этот код

 DF = data.frame(A=1:3, B=c("foo","A,Name","baz"))
fwrite(ДФ)
write.csv(DF, row.names=FALSE, quote=FALSE) # то же самое
fwrite(DF, row.names=ИСТИНА, цитата=ИСТИНА)
write. csv(DF) # то же самое
DF = data.frame(A=c(2.1,-1.234e-307,pi), B=c("foo","A,Name","bar"))
fwrite(DF, quote='auto') # Просто DF[2,2] автоматически цитируется
write.csv(DF, row.names=FALSE) # такое же числовое форматирование
DT = data.table(A=c(2,5.6,-3),B=list(1:3,c("foo","A,Name","bar")),round(pi*1:3 ,2)))
fwrite(ДТ)
fwrite(DT, sep="|", sep2=c("{",",","}"))
если (ЛОЖЬ) {
set.seed(1)
DT = as.data.table( lapply(1:10, образец,
 x=as.numeric(1:5e7), size=5e6)) # 382 МБ
system.time(fwrite(DT, "/dev/shm/tmp1.csv")) # 0,8 с
system.time(write.csv(DT, "/dev/shm/tmp2.csv", # 60,6 с
 цитата = ЛОЖЬ, row.names = ЛОЖЬ))
system("diff /dev/shm/tmp1.csv /dev/shm/tmp2.csv") # идентичны
set.seed(1)
N = 1e7
DT = данные.таблица(
 str1=sample(sprintf("%010d",sample(N,1e5,replace=TRUE)), N, replace=TRUE),
 str2 = образец (sprintf ("% 09д", образец (N, 1e5, заменить = ИСТИНА)), N, заменить = ИСТИНА),
 str3 = образец (sapply (образец (2:30, 100, ИСТИНА), функция (n)
 paste0 (образец (БУКВЫ, n, ИСТИНА), свернуть = "")), N, ИСТИНА),
 str4 = sprintf («% 05d», образец (образец (1e5,50), N, ИСТИНА)),
 num1 = образец (раунд (rnorm (1e6, среднее = 6,5, sd = 15), 2), N, заменить = ИСТИНА),
 num2=sample(round(rnorm(1e6,mean=6.