diff --git a/CODEOWNERS b/CODEOWNERS index 1572fa3e56..9f34abcfc0 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -48,6 +48,8 @@ /po/*zh_CN.po @Rdatatable/chinese /po/*pt_BR.po @Rdatatable/brazil /po/*es.po @Rdatatable/spanish +/po/*ru.po @Rdatatable/russian +/vignettes/ru/*.Rmd @Rdatatable/russian # printing /R/print.data.table.R @michaelchirico diff --git a/inst/po/ru/LC_MESSAGES/R-data.table.mo b/inst/po/ru/LC_MESSAGES/R-data.table.mo new file mode 100644 index 0000000000..f014a1e7e0 Binary files /dev/null and b/inst/po/ru/LC_MESSAGES/R-data.table.mo differ diff --git a/inst/po/ru/LC_MESSAGES/data.table.mo b/inst/po/ru/LC_MESSAGES/data.table.mo new file mode 100644 index 0000000000..580a2345f1 Binary files /dev/null and b/inst/po/ru/LC_MESSAGES/data.table.mo differ diff --git a/po/R-ru.po b/po/R-ru.po new file mode 100644 index 0000000000..147d90ea38 --- /dev/null +++ b/po/R-ru.po @@ -0,0 +1,3691 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.15.99\n" +"POT-Creation-Date: 2025-01-29 23:31-0800\n" +"PO-Revision-Date: 2025-01-31 13:52+0300\n" +"Last-Translator: Ivan Krylov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Poedit 3.2.2\n" + +#: AllS4.R:2 +#, c-format +msgid "data.table package loaded. When developing don't load package" +msgstr "Пакет data.table загружен. При разработке не загружайте пакет" + +#: IDateTime.R:107 +#, c-format +msgid "binary + is not defined for \"IDate\" objects" +msgstr "сложение не определено для объектов «IDate»" + +#: IDateTime.R:114 +#, c-format +msgid "can only subtract from \"IDate\" objects" +msgstr "могу только вычитать из объектов «IDate»" + +#: IDateTime.R:119 +#, c-format +msgid "unary - is not defined for \"IDate\" objects" +msgstr "противоположное число не определено для объектов «IDate»" + +#: IDateTime.R:309 +#, c-format +msgid "Valid options for ms are 'truncate', 'nearest', and 'ceil'." +msgstr "Допустимые значения для «ms»: «truncate», «nearest» и «ceil»." + +#: as.data.table.R:86 +#, c-format +msgid "" +"as.data.table.array method should only be called for arrays with 3+ " +"dimensions; use the matrix method for 2-dimensional arrays" +msgstr "" +"метод as.data.table.array следует вызывать только для массивов размерностью " +"более 3; используйте матричный метод для двумерных массивов" + +#: as.data.table.R:88 +#, c-format +msgid "" +"Argument 'value.name' must be scalar character, non-NA and at least one " +"character" +msgstr "" +"Аргумент «value.name» должен быть скалярной строкой, отличной от NA, и иметь " +"хотя бы один символ" + +#: as.data.table.R:90 +#, c-format +msgid "Argument 'sorted' must be scalar logical and non-NA" +msgstr "Аргумент 'sorted' должен быть скалярным логическим и не являться NА" + +#: as.data.table.R:92 +#, c-format +msgid "Argument 'na.rm' must be scalar logical and non-NA" +msgstr "Аргумент 'na.rm' должен быть скалярным логическим и не являться NА" + +#: as.data.table.R:94 +#, c-format +msgid "Please provide either 'key' or 'sorted', but not both." +msgstr "Пожалуйста, укажите либо «key», либо «sorted», но не оба варианта." + +#: as.data.table.R:108 +#, c-format +msgid "" +"Argument 'value.name' should not overlap with column names in result: %s" +msgstr "" +"Аргумент 'value.name' не должен пересекаться с именами столбцов в " +"результатах: %s" + +#: as.data.table.R:140 +#, c-format +msgid "" +"POSIXlt column type detected and converted to POSIXct. We do not recommend " +"use of POSIXlt at all because it uses 40 bytes to store one date." +msgstr "" +"Обнаружен столбец типа POSIXlt и преобразован в POSIXct. Рекомендуется вовсе " +"не использовать POSIXlt, поскольку для хранения одной даты он использует 40 " +"байт памяти." + +#: as.data.table.R:181 +#, c-format +msgid "Item %d has %d rows but longest item has %d; recycled with remainder." +msgstr "" +"Элемент №%d содержит %d строк, но самый длинный элемент содержит %d; " +"использую повторно, но с остатком." + +#: as.data.table.R:196 +#, c-format +msgid "A column may not be called .SD. That has special meaning." +msgstr "Нельзя называть столбец «.SD»: это специальное имя." + +#: as.data.table.R:210 +#, c-format +msgid "class must be length 1" +msgstr "класс должен быть длины 1" + +#: between.R:3 +#, c-format +msgid "between has been passed an argument x of type logical" +msgstr "функции between() был передан аргумент «x» логического типа" + +#: between.R:13 between.R:15 +#, c-format +msgid "" +"The 'x' argument of the 'between' function is POSIXct while '%s' was not, " +"coercion to POSIXct failed with: %s" +msgstr "" +"В функции «between» аргумент «x» относится к классу POSIXct, а «%s» — нет, " +"приведение к POSIXct не удалось: %s" + +#: between.R:27 +#, c-format +msgid "" +"'between' lower= and upper= are both POSIXct but have different tzone " +"attributes: %s. Please align their time zones." +msgstr "" +"В функции between() и lower=, и upper= оба являются POSIXct, но имеют " +"различные атрибуты «tzone»: %s. Пожалуйста, дайте им одинаковые часовые " +"пояса." + +#: between.R:31 +#, c-format +msgid "" +"'between' arguments are all POSIXct but have mismatched tzone attributes: " +"%s. The UTC times will be compared." +msgstr "" +"Все аргументы функции between() являются POSIXct, но их атрибуты 'tzone' не " +"совпадают: %s. Буду сравнивать время по UTC." + +#: between.R:36 +#, c-format +msgid "trying to use integer64 class when 'bit64' package is not installed" +msgstr "" +"попытка использовать класс integer64, тогда как пакет «bit64» не установлен" + +#: between.R:48 +#, c-format +msgid "" +"Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" +msgstr "" +"NAbounds=TRUE не реализовано для типов, которые не являются числовыми или " +"строковыми" + +#: between.R:49 +#, c-format +msgid "Some lower>upper for this non-numeric and non-character type" +msgstr "" +"Для данного типа данных (не строк или чисел) некоторые элементы «lower» " +"оказались больше, чем «upper»" + +#: between.R:63 +#, c-format +msgid "Perhaps you meant %s?" +msgstr "Возможно, Вам нужно %s?" + +#: between.R:64 +#, c-format +msgid "" +"RHS has length() %d; expecting length 2. %sThe first element should be the " +"lower bound(s); the second element should be the upper bound(s)." +msgstr "" +"length() для правой части равна %d, ожидается 2. %sПервый элемент должен " +"быть нижней(ими) границей(ами), второй - верхней(ими)." + +#: bmerge.R:65 bmerge.R:66 +#, c-format +msgid "%s is type %s which is not supported by data.table join" +msgstr "" +"%s оказалось типа %s, что операция соединения для data.table не поддерживает" + +#: bmerge.R:69 +#, c-format +msgid "" +"Attempting roll join on factor column when joining %s to %s. Only integer, " +"double or character columns may be roll joined." +msgstr "" +"Ошибочная попытка скользящего соединения для столбца-фактора при соединении " +"%s с %s. Только численные или строковые столбцы допустимы в скользящем " +"соединении." + +#: bmerge.R:87 +#, c-format +msgid "" +"Incompatible join types: %s (%s) and %s (%s). Factor columns must join to " +"factor or character columns." +msgstr "" +"Несовместимые типы соединения: %s (%s) и %s (%s). Столбцы-факторы можно " +"соединять только с факторами и строками." + +#: bmerge.R:97 bmerge.R:101 +msgid "(all-NA)" +msgstr "(полностью NA)" + +#: bmerge.R:104 +#, c-format +msgid "Incompatible join types: %s (%s) and %s (%s)" +msgstr "Несовместимые типы соединения: %s (%s) и %s (%s)" + +#: bmerge.R:110 +msgid "(which has integer64 representation, e.g. no fractions)" +msgstr "(что может быть представлено как integer64, т.е., без дробей)" + +#: bmerge.R:112 +#, c-format +msgid "" +"Incompatible join types: %s is type integer64 but %s is type double and " +"cannot be coerced to integer64 (e.g. has fractions)" +msgstr "" +"Несовместимые типы соединений: %s имеет тип integer64, но %s имеет тип " +"double и не может быть представлено в виде integer64 (напр., содержит дроби)" + +#: bmerge.R:132 +msgid "(which contains no fractions)" +msgstr "(не содержит дробей)" + +#: bmerge.R:144 +msgid "(which contains fractions)" +msgstr "(содержит дроби)" + +#: bmerge.R:147 +msgid "(for join)" +msgstr "(для соединения)" + +#: bmerge.R:187 +#, c-format +msgid "roll is not implemented for non-equi joins yet." +msgstr "«roll» пока не реализовано для соединения по неравенствам." + +#: bmerge.R:207 +#, c-format +msgid "Column name '_nqgrp_' is reserved for non-equi joins." +msgstr "Имя столбца «_nqgrp_» зарезервировано для соединения по неравенствам." + +#: data.table.R:55 +#, c-format +msgid "key argument of data.table() must be character" +msgstr "аргумент «key» для data.table() должен быть строковым" + +#: data.table.R:121 +#, c-format +msgid "Object '%s' not found. Perhaps you intended %s" +msgstr "Объект «%s» не найден. Возможно, вы имели в виду %s" + +#: data.table.R:123 +#, c-format +msgid "Object '%s' not found amongst %s" +msgstr "Объект «%s» не найден среди %s" + +#: data.table.R:140 +#, c-format +msgid "" +"[ was called on a data.table in an environment that is not data.table-aware " +"(i.e. cedta()), but '%s' was used, implying the owner of this call really " +"intended for data.table methods to be called. See vignette('datatable-" +"importing') for details on properly importing data.table." +msgstr "" +"Метод [ был вызван для data.table из окружения, не поддерживающего data." +"table (см. ?cedta()), но было передано '%s', что означает, что вызывающей " +"функции действительно нужен метод data.table. Подробнее о правильном " +"использовании data.table в пакетах см. в vignette('datatable-importing')." + +#: data.table.R:151 +#, c-format +msgid "verbose must be logical or integer" +msgstr "«verbose» должно быть логическим или целочисленным" + +#: data.table.R:152 +#, c-format +msgid "verbose must be length 1 non-NA" +msgstr "«verbose» должно быть длины 1 и не-NA" + +#: data.table.R:160 +#, c-format +msgid "Ignoring by/keyby because 'j' is not supplied" +msgstr "Игнорирую «by»/«keyby», потому что «j» не был передан" + +#: data.table.R:174 +#, c-format +msgid "When by and keyby are both provided, keyby must be TRUE or FALSE" +msgstr "Когда «by» и «keyby» оба переданы, «keyby» должно быть TRUE либо FALSE" + +#: data.table.R:186 +#, c-format +msgid "" +"When on= is provided but not i=, on= must be a named list or data.table|" +"frame, and a natural join (i.e. join on common names) is invoked. Ignoring " +"on= which is '%s'." +msgstr "" +"Если указано on=, но не i=, on= должно быть именованным списком или data." +"table|frame; тогда будет выполнено натуральное соединение (т. е. по столбцам " +"с общими именами). Игнорирую on=, которое имеет значение '%s'." + +#: data.table.R:199 +#, c-format +msgid "" +"i and j are both missing so ignoring the other arguments. This warning will " +"be upgraded to error in future." +msgstr "" +"i и j отсутствуют, поэтому игнорирую остальные аргументы. В будущем это " +"предупреждение будет преобразовано в ошибку." + +#: data.table.R:203 +#, c-format +msgid "mult argument can only be 'first', 'last' or 'all'" +msgstr "аргумент «mult» должен быть 'first', 'last' или 'all'" + +#: data.table.R:205 +#, c-format +msgid "" +"roll must be a single TRUE, FALSE, positive/negative integer/double " +"including +Inf and -Inf or 'nearest'" +msgstr "" +"roll должен быть TRUE, FALSE, положительным/отрицательным числом, включая " +"+Inf и -Inf, либо 'nearest'" + +#: data.table.R:207 +#, c-format +msgid "roll is '%s' (type character). Only valid character value is 'nearest'." +msgstr "" +"«roll» - это '%s' (строка). Единственное допустимое строковое значение - " +"'nearest'." + +#: data.table.R:212 +#, c-format +msgid "rollends must be a logical vector" +msgstr "«rollends» должно быть логическим вектором" + +#: data.table.R:213 +#, c-format +msgid "rollends must be length 1 or 2" +msgstr "«rollends» должно быть длины 1 или 2" + +#: data.table.R:221 +#, c-format +msgid "" +"nomatch= must be either NA or NULL (or 0 for backwards compatibility which " +"is the same as NULL but please use NULL)" +msgstr "" +"nomatch= должно быть либо NA, либо NULL (ранее 0 значило то же, что сейчас " +"значит NULL)" + +#: data.table.R:224 +#, c-format +msgid "which= must be a logical vector length 1. Either FALSE, TRUE or NA." +msgstr "which= должен быть FALSE, TRUE или NA_logical_." + +#: data.table.R:225 +#, c-format +msgid "" +"which==%s (meaning return row numbers) but j is also supplied. Either you " +"need row numbers or the result of j, but only one type of result can be " +"returned." +msgstr "" +"which==%s (значит, вернуть номера строк), но также передан j. Вы можете " +"запросить либо одно, либо другое, но не всё сразу." + +#: data.table.R:226 +#, c-format +msgid "" +"which=NA with nomatch=0|NULL would always return an empty vector. Please " +"change or remove either which or nomatch." +msgstr "" +"which=NA с nomatch=0|NULL всегда будет возвращать пустой вектор. Пожалуйста, " +"измените или удалите либо «which», либо «nomatch»." + +#: data.table.R:227 +#, c-format +msgid "j must be provided when with=FALSE" +msgstr "j должен быть передан, если with=FALSE" + +#: data.table.R:228 +#, c-format +msgid "%s must be TRUE or FALSE" +msgstr "%s должно быть TRUE или FALSE" + +#: data.table.R:270 +#, c-format +msgid "" +"The symbol .. is invalid. The .. prefix must be followed by at least one " +"character." +msgstr "" +"Имя переменной .. недопустимо. За префиксом .. должен следовать хотя бы один " +"символ." + +#: data.table.R:274 +#, c-format +msgid "" +"Variable '..%s' does exist in calling scope though, so please just removed " +"the .. prefix from that variable name in calling scope." +msgstr "" +"Переменная '..%s' все же существует в окружении вызывающей функции, поэтому " +"просто удалите префикс .. из имени этой переменной там, откуда вызываете эту " +"функцию." + +#: data.table.R:278 +#, c-format +msgid "" +"Variable '%s' is not found in calling scope. Looking in calling scope " +"because you used the .. prefix.%s" +msgstr "" +"Переменная '%s' не найдена в окружении вызывающей функции. Был выполнен " +"поиск в этом месте, потому что Вы использовали префикс «..».%s" + +#: data.table.R:280 +#, c-format +msgid "" +"Both '%1$s' and '..%1$s' exist in calling scope. Please remove the '..%1$s' " +"variable in calling scope for clarity." +msgstr "" +"И '%1$s', и '..%1$s' существуют в окружении вызывающей функции. Для " +"наглядности удалите переменную '..%1$s' там, откуда вызываете эту функцию." + +#: data.table.R:288 +#, c-format +msgid "" +"Variable '%s' is not found in calling scope. Looking in calling scope " +"because you set with=FALSE. Also, please use .. symbol prefix and remove " +"with=FALSE." +msgstr "" +"Переменная '%s' не найдена в окружении вызывающей функции. Был выполнен " +"поиск там, потому что Вы передали with=FALSE. Также, пожалуйста, добавьте " +"«..» перед именем переменной и удалите with=FALSE." + +#: data.table.R:296 +#, c-format +msgid "" +"You have wrapped := with {} which is ok but then := must be the only thing " +"inside {}. You have something else inside {} as well. Consider placing the " +"{} on the RHS of := instead; e.g. DT[,someCol:={tmpVar1<-...;tmpVar2<-...;" +"tmpVar1*tmpVar2}]" +msgstr "" +"Вы обернули := в {}, что приемлемо, но тогда := должно быть единственным " +"элементом внутри {}. У вас внутри {} также есть что-то еще. Возможно, вам " +"нужно поместить {} в правую часть присваивания: DT[,someCol:={tmpVar1<-...;" +"tmpVar2<-...;tmpVar1*tmpVar2}]" + +#: data.table.R:314 +#, c-format +msgid "" +":= with keyby is only possible when i is not supplied since you can't setkey " +"on a subset of rows. Either change keyby to by or remove i" +msgstr "" +":= с keyby возможно только в том случае, если не передавать i, поскольку " +"нельзя задать ключ для подмножества строк. Либо измените keyby на by, либо " +"удалите i" + +#: data.table.R:316 +#, c-format +msgid "nomatch isn't relevant together with :=, ignoring nomatch" +msgstr "nomatch не имеет смысла вместе с :=; игнорирую nomatch" + +#: data.table.R:372 +#, c-format +msgid "" +"not-join '!' prefix is present on i but nomatch is provided. Please remove " +"nomatch." +msgstr "" +"«i» содержит префикс '!' (соединение по отрицанию условия), но также передан " +"аргумент «nomatch». Пожалуйста, удалите «nomatch»." + +#: data.table.R:400 +#, c-format +msgid "" +"Operator := detected in i, the first argument inside DT[...], but is only " +"valid in the second argument, j. Most often, this happens when forgetting " +"the first comma (e.g. DT[newvar := 5] instead of DT[ , new_var := 5]). " +"Please double-check the syntax. Run traceback(), and debugger() to get a " +"line number." +msgstr "" +"В «i», первом аргументе внутри DT[...], найден оператор :=. Он имеет смысл " +"только во втором аргументе, «j». Вероятно, Вы забыли первую запятую " +"(например, DT[newvar := 5] вместо DT[ , new_var := 5]). Пожалуйста, " +"перепроверьте синтаксис. Запустите traceback() или debugger(), чтобы узнать " +"номер строки." + +#: data.table.R:410 +#, c-format +msgid "'%s' is not found in calling scope and it is not a column name either" +msgstr "" +"'%s' не найдено в окружении вызывающей функции и не является именем столбца" + +#: data.table.R:413 +#, c-format +msgid "" +"'%s' is not found in calling scope, but it is a column of type %s. If you " +"wish to select rows where that column contains TRUE, or perhaps that column " +"contains row numbers of itself to select, try DT[(col)], DT[DT$col], or " +"DT[col==TRUE] is particularly clear and is optimized" +msgstr "" +"'%s' не найден в окружении вызывающей функции, но это столбец типа %s. Если " +"вы хотите выбрать строки, в которых этот столбец содержит TRUE, или, " +"возможно, этот столбец содержит номера строк, которые нужно выбрать, " +"попробуйте DT[(col)], DT[DT$col] или DT[col==TRUE]" + +#: data.table.R:416 +#, c-format +msgid "" +"%s. When the first argument inside DT[...] is a single symbol (e.g. " +"DT[var]), data.table looks for var in calling scope." +msgstr "" +"%s. Если первым аргументом внутри DT[...] является одиночное имя переменной " +"(например, DT[var]), data.table ищет «var» в окружении вызывающей функции." + +#: data.table.R:428 +#, c-format +msgid "" +"i is invalid type (matrix). Perhaps in future a 2 column matrix could return " +"a list of elements of DT (in the spirit of A[B] in FAQ 2.14). Please report " +"to data.table issue tracker if you'd like this, or add your comments to FR " +"#657." +msgstr "" +"Неправильный тип «i» (матрица). Возможно, в будущем можно будет передать " +"матрицу из двух столбцов, чтобы извлекать соответствующие элементы (в духе " +"A[B] из data.table FAQ 2.14). Подробнее см. FR #657 в трекере data.table." + +#: data.table.R:451 +#, c-format +msgid "" +"When i is a data.table (or character vector), the columns to join by must be " +"specified using 'on=' argument (see ?data.table), by keying x (i.e. sorted, " +"and, marked as sorted, see ?setkey), or by sharing column names between x " +"and i (i.e., a natural join). Keyed joins might have further speed benefits " +"on very large data due to x being sorted in RAM." +msgstr "" +"Если i - таблица данных (или строковой вектор), столбцы для соединения можно " +"указать в аргументе «on=» (см. ?data.table), или путём сортировки «x» по " +"ключу (см. ?setkey), или путем «естественного» соединения «x» и «i» по общим " +"именам столбцов. Соединения с ключом могут выиграть немного скорости на " +"очень больших данных за счёт того, что «x» уже отсортирован." + +#: data.table.R:459 +#, c-format +msgid "Attempting to do natural join but no common columns in provided tables" +msgstr "" +"Попытка выполнить «естественное» соединение, но у таблиц нет общих столбцов" + +#: data.table.R:591 +#, c-format +msgid "logical error. i is not a data.table, but 'on' argument is provided." +msgstr "" +"Логическая ошибка. «i» не является data.table, но передан аргумент «on»." + +#: data.table.R:595 +#, c-format +msgid "i has evaluated to type %s. Expecting logical, integer or double." +msgstr "" +"Вычисление «i» дало значение типа %s, а должно быть логическое или численное." + +#: data.table.R:617 +#, c-format +msgid "" +"i evaluates to a logical vector length %d but there are %d rows. Recycling " +"of logical i is no longer allowed as it hides more bugs than is worth the " +"rare convenience. Explicitly use rep(...,length=.N) if you really need to " +"recycle." +msgstr "" +"Вычисление «i» дало логический вектор длиной %d, но всего есть %d строк. " +"«Повторное использование» логических векторов больше не работает, потому что " +"от него больше вреда, чем пользы. Если нужно, явным образом используйте " +"rep(..., length = .N)." + +#: data.table.R:620 +#, c-format +msgid "" +"Please use nomatch=NULL instead of nomatch=0; see news item 5 in v1.12.0 " +"(Jan 2019)" +msgstr "" +"Пожалуйста, используйте nomatch=NULL вместо nomatch=0; см. новость 5 для " +"версии 1.12.0 (январь 2019)" + +#: data.table.R:691 +#, c-format +msgid "" +"with=FALSE together with := was deprecated in v1.9.4 released Oct 2014; this " +"has been warning since v1.15.0. Please wrap the LHS of := with parentheses; " +"e.g., DT[,(myVar):=sum(b),by=a] to assign to column name(s) held in variable " +"myVar. See ?':=' for other examples." +msgstr "" +"with=FALSE вместе с := не рекомендуется использовать, начиная с версии " +"1.9.4, выпущенной в октябре 2014 года (с версии 1.15.0 это явное " +"предупреждение). Пожалуйста, оберните левую часть присваивания := круглыми " +"скобками: например, DT[,(myVar):=sum(b),by=a], чтобы присвоит столбцам, " +"имена которых находятся в переменной «myVar». Другие примеры см. в ?':='." + +#: data.table.R:734 +#, c-format +msgid "Item %d of j is %d which is outside the column number range [1,ncol=%d]" +msgstr "" +"Элемент №%d из j равен %d, что вне диапазона номеров столбцов [1,ncol=%d]" + +#: data.table.R:737 +#, c-format +msgid "j mixes positives and negatives" +msgstr "внутри «j» смешаны положительные и отрицательные числа" + +#: data.table.R:745 +#, c-format +msgid "" +"When with=FALSE, j-argument should be of type logical/character/integer " +"indicating the columns to select." +msgstr "" +"Когда with=FALSE, аргумент «j» должен иметь тип logical/character/integer и " +"выбирать подмножество столбцов." + +#: data.table.R:759 +#, c-format +msgid "" +"'by' contains .I but only the following are currently supported: by=.I, by=." +"(.I), by=c(.I), by=list(.I)" +msgstr "" +"«by» содержит .I, но в этой версии поддерживаются только следующие формы: " +"by=.I, by=.(.I), by=c(.I), by=list(.I)" + +#: data.table.R:783 +#, c-format +msgid "by=c(...), key(...) or names(...) must evaluate to 'character'" +msgstr "" +"результатом вычисления by=c(...), key(...) или names(...) должен быть вектор " +"строк" + +#: data.table.R:793 +#, c-format +msgid "" +"'by' is a character vector length %d but one or more items include a comma. " +"Either pass a vector of column names (which can contain spaces, but no " +"commas), or pass a vector length 1 containing comma separated column names. " +"See ?data.table for other possibilities." +msgstr "" +"'by' - это вектор из %d сток, но один или несколько элементов содержат " +"запятую. Либо передайте вектор имен столбцов (который может содержать " +"пробелы, но не запятые), либо передайте одну строку, содержащую имена " +"столбцов, разделенные запятыми. Другие возможности см. в ?data.table." + +#: data.table.R:800 +#, c-format +msgid "At least one entry of by is empty" +msgstr "Как минимум один элемент «by» пуст" + +#: data.table.R:875 +#, c-format +msgid "" +"'by' appears to evaluate to column names but isn't c() or key(). Use " +"by=list(...) if you can. Otherwise, by=eval%s should work. This is for " +"efficiency so data.table can detect which columns are needed." +msgstr "" +"По-видимому, результатом вычисления «by» являются имена столбцов, но " +"переданное выражение не является c() или key(). Пожалуйста, используйте " +"by=list(...), если возможно. В противном случае подойдет by=eval%s. Это " +"сделано для эффективности, чтобы data.table могла определить, какие столбцы " +"нужны." + +#: data.table.R:886 +#, c-format +msgid "" +"'by' or 'keyby' must evaluate to a vector or a list of vectors (where 'list' " +"includes data.table and data.frame which are lists, too)" +msgstr "" +"Результатом вычисления «by» или «keyby» должен быть вектор или список " +"векторов (что включает data.table и data.frame)" + +#: data.table.R:890 +#, c-format +msgid "" +"Column or expression %d of 'by' or 'keyby' is type '%s' which is not " +"currently supported. If you have a compelling use case, please add it to " +"https://github.com/Rdatatable/data.table/issues/1597. As a workaround, " +"consider converting the column to a supported type, e.g. by=sapply(list_col, " +"toString), whilst taking care to maintain distinctness in the process." +msgstr "" +"Столбец или выражение №%d из «by» или «keyby» имеет тип '%s', который в " +"настоящее время не поддерживается. Если у вас есть убедительный пример " +"использования, пожалуйста, добавьте его на https://github.com/Rdatatable/" +"data.table/issues/1597. Можно также попробовать преобразовать столбец к " +"поддерживаемому типу, например by=sapply(list_col, toString), позаботившись " +"при этом о сохранении различимости." + +#: data.table.R:896 +#, c-format +msgid "" +"%s Each must be length %d; the same length as there are rows in x (after " +"subsetting if i is provided)." +msgstr "" +"%s Каждый из них должен иметь длину %d, такую же, как и строки в «x» (после " +"извлечения подмножества, если указано «i»)." + +#: data.table.R:950 +#, c-format +msgid "Item %d of the .() or list() passed to j is missing" +msgstr "Пропущенный элемент №%d из .() или list(), переданного как «j»" + +#: data.table.R:956 +#, c-format +msgid "" +"j may not evaluate to the same number of columns for each group; if you're " +"sure this warning is in error, please put the branching logic outside of " +"[ for efficiency" +msgstr "" +"Возможно, вычисление «j» не даст одинаковое количество столбцов для каждой " +"группы. Если Вы уверены, что с Вашим выражением точно всё в порядке, " +"поместите логику ветвления за пределы [ для эффективности" + +#: data.table.R:958 +#, c-format +msgid "" +"Different branches of j expression produced different auto-named columns: " +"%s; using the most \"last\" names. If this was intentional (e.g., you know " +"only one branch will ever be used in a given query because the branch is " +"controlled by a function argument), please (1) pull this branch out of the " +"call; (2) explicitly provide missing defaults for each branch in all cases; " +"or (3) use the same name for each branch and re-name it in a follow-up call." +msgstr "" +"Разные ветви выражения j выдают разные автоматически именованные столбцы: " +"%s; использую те, которые были получены позже всего. Если это намеренно " +"(например, Вы знаете, что в данном запросе будет использоваться только одна " +"ветвь, поскольку ветвь управляется аргументом функции), пожалуйста, (1) " +"удалите лишние ветви из вызова; (2) явно предоставьте отсутствующие значения " +"по умолчанию для каждой ветви во всех случаях, или (3) используйте одно и то " +"же имя для каждой ветви и переименуйте столбцы в последующем вызове." + +#: data.table.R:1028 +#, c-format +msgid "" +"When .SDcols is a function, it is applied to each column; the output of this " +"function must be a non-missing boolean scalar signalling inclusion/exclusion " +"of the column. However, these conditions were not met for: %s" +msgstr "" +"Когда .SDcols является функцией, она применяется к каждому столбцу; " +"результатом этой функции должен быть не-NA логический скаляр, " +"сигнализирующий о включении/исключении столбца. Однако, эти условия не были " +"выполнены для: %s" + +#: data.table.R:1034 +#, c-format +msgid ".SDcols missing at the following indices: %s" +msgstr ".SDcols NA по следующим индексам: %s" + +#: data.table.R:1036 +#, c-format +msgid ".SDcols is a logical vector of length %d but there are %d columns" +msgstr ".SDcols - логический вектор длины %d, но всего есть %d столбцов" + +#: data.table.R:1042 +#, c-format +msgid ".SDcols is numeric but has both +ve and -ve indices" +msgstr ".SDcols является численным, но содержит индексы разных знаков" + +#: data.table.R:1044 +#, c-format +msgid ".SDcols is numeric but out of bounds [1, %d] at: %s" +msgstr ".SDcols является численным, но выходит за пределы [1, %d] в: %s" + +#: data.table.R:1048 +#, c-format +msgid ".SDcols should be column numbers or names" +msgstr ".SDcols должен содержать номера или имена столбцов" + +#: data.table.R:1050 +#, c-format +msgid "Some items of .SDcols are not column names: %s" +msgstr "Некоторые элементы .SDcols не являются именами столбцов: %s" + +#: data.table.R:1092 +#, c-format +msgid "" +"This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?" +"data.table." +msgstr "" +"Этот «j» не использует «.SD», но .SDcols был передан. Игнорирую «.SDcols». " +"См. ?data.table." + +#: data.table.R:1108 +#, c-format +msgid "" +".SD is locked. Using := in .SD's j is reserved for possible future use; a " +"tortuously flexible way to modify by group. Use := in j directly to modify " +"by group by reference." +msgstr "" +".SD заблокировано. Использование := в .SD внутри «j» зарезервировано для " +"возможного использования в будущем. Используйте := в «j» напрямую, чтобы " +"изменить группу по ссылке." + +#: data.table.R:1119 +#, c-format +msgid "In %s(col1=val1, col2=val2, ...) form, all arguments must be named." +msgstr "" +"В форме %s(col1=val1, col2=val2, ...) все аргументы должны быть названы." + +#: data.table.R:1142 +#, c-format +msgid "" +"In %s(col1=val1, col2=val2, ...) form, all arguments must be named, but the " +"last argument has no name. Did you forget a trailing comma?" +msgstr "" +"В форме %s(col1=val1, col2=val2, ...) все аргументы должны быть названы, но " +"последний аргумент не имеет имени. Вы забыли запятую в конце?" + +#: data.table.R:1144 +#, c-format +msgid "" +"In %s(col1=val1, col2=val2, ...) form, all arguments must be named, but " +"these arguments lack names: %s." +msgstr "" +"В форме %s(col1=val1, col2=val2, ...) все аргументы должны быть названы, но " +"у этих аргументов нет имен: %s." + +#: data.table.R:1151 +#, c-format +msgid "" +"LHS of := must be a symbol, or an atomic vector (column names or positions)." +msgstr "" +"Левая сторона присваивания := должна быть символом или атомарным вектором " +"(имён или позиций столбцов)." + +#: data.table.R:1156 +#, c-format +msgid "" +"LHS of := appears to be column positions but are outside [1,ncol] range. New " +"columns can only be added by name." +msgstr "" +"По-видимому, в левой стороне := содержатся позиции столбцов, но они " +"находятся вне диапазона [1, число столбцов]. Новые столбцы могут быть " +"добавлены только по имени." + +#: data.table.R:1159 +#, c-format +msgid "" +"LHS of := isn't column names ('character') or positions ('integer' or " +"'numeric')" +msgstr "" +"Левая сторона присваивания := не является именем столбца (типа 'character') " +"или позицией (типов 'integer' или 'numeric')" + +#: data.table.R:1190 +#, c-format +msgid "" +"A shallow copy of this data.table was taken so that := can add or remove %d " +"columns by reference. At an earlier point, this data.table was copied by R " +"(or was created manually using structure() or similar). Avoid names<- and " +"attr<- which in R currently (and oddly) may copy the whole data.table. Use " +"set* syntax instead to avoid copying: ?set, ?setnames and ?setattr. It's " +"also not unusual for data.table-agnostic packages to produce tables affected " +"by this issue. If this message doesn't help, please report your use case to " +"the data.table issue tracker so the root cause can be fixed or this message " +"improved." +msgstr "" +"Создана поверхностная копия таблицы, чтобы := мог добавить %d столбц(ов) по " +"ссылке. Ранее эта data.table была скопирована R (или создана вручную с " +"помощью structure() или аналогичной функции). Избегайте names<- и attr<-, " +"которые в R в настоящее время могут копировать всю таблицу data.table. " +"Вместо этого используйте синтаксис set*, чтобы избежать копирования: ?set, ?" +"setnames и ?setattr. Если это сообщение не помогло, пожалуйста, сообщите о " +"своем варианте использования в трекере проблем data.table, чтобы можно было " +"устранить причину проблемы или улучшить это сообщение." + +#: data.table.R:1221 +#, c-format +msgid "" +"Cannot assign to an under-allocated recursively indexed list -- L[[i]][,:=] " +"syntax is only valid when i is length 1, but its length is %d" +msgstr "" +"Невозможно присвоить рекурсивно индексируемому списку с недостаточным " +"выделением памяти: синтаксис L[[i]][,:=] работает только в том случае, если " +"«i» имеет длину 1, но его длина равна %d" + +#: data.table.R:1292 +#, c-format +msgid "" +"Variable '%s' is not found in calling scope. Looking in calling scope " +"because this symbol was prefixed with .. in the j= parameter." +msgstr "" +"Переменная '%s' не найдена в окружении вызывающей функции. Там был выполнен " +"поиск, поскольку в параметре «j» этот символ был снабжен префиксом «..»." + +#: data.table.R:1378 +#, c-format +msgid "" +"j (the 2nd argument inside [...]) is a single symbol but column name '%1$s' " +"is not found. If you intended to select columns using a variable in calling " +"scope, please try DT[, ..%1$s]. The .. prefix conveys one-level-up similar " +"to a file system path." +msgstr "" +"j (2-й аргумент внутри [...]) является одиночным именем переменной, но имя " +"столбца '%1$s' не найдено. Если вы хотели выбрать столбцы с помощью " +"локальной переменной, попробуйте использовать DT[, ..%1$s]. Префикс .. " +"выполняет поиск переменной на один вызов функции выше, аналогично путям в " +"файловой системе." + +#: data.table.R:1466 +#, c-format +msgid "" +"The column '.N' can't be grouped because it conflicts with the special .N " +"variable. Try setnames(DT,'.N','N') first." +msgstr "" +"Не могу группировать по содержимому стобца «.N», потому что он конфликтует " +"со специальной переменной .N. Попробуйте сначала выполнить setnames(DT,'." +"N','N')." + +#: data.table.R:1467 +#, c-format +msgid "" +"The column '.I' can't be grouped because it conflicts with the special .I " +"variable. Try setnames(DT,'.I','I') first." +msgstr "" +"Не могу группировать по содержимому стобца «.I», потому что он конфликтует " +"со специальной переменной .I. Попробуйте сначала выполнить setnames(DT,'." +"I','I')." + +#: data.table.R:1495 +#, c-format +msgid "logical error. i is not a data.table, but mult='all' and 'by'=.EACHI" +msgstr "" +"Логическая ошибка. «i» не является data.table, но mult='all' и 'by'=.EACHI" + +#: data.table.R:1834 +#, c-format +msgid "" +"Unable to optimize call to mean() and could be very slow. You must name 'na." +"rm' like that otherwise if you do mean(x,TRUE) the TRUE is taken to mean " +"'trim' which is the 2nd argument of mean. 'trim' is not yet optimized." +msgstr "" +"Не удаётся оптимизировать вызов mean(); он может быть очень медленным. " +"Обязательно явно называйте аргумент 'na.rm': mean(x,TRUE) будет воспринято " +"как trim=TRUE, который еще не оптимизирован." + +#: data.table.R:1980 +#, c-format +msgid "" +"The setkey() normally performed by keyby= has been skipped (as if by= was " +"used) because := is being used together with keyby= but the keyby= contains " +"some expressions. To avoid this warning, use by= instead, or provide " +"existing column names to keyby=." +msgstr "" +"Операция setkey(), обычно выполняемая keyby=, была пропущена (как если бы " +"использовался by=), потому что := используется вместе с keyby=, но keyby= " +"содержит вычисляемые выражения. Чтобы избежать этого предупреждения, " +"используйте вместо этого by= или укажите имена существующих столбцов в " +"keyby=." + +#: data.table.R:2072 +#, c-format +msgid "rownames and rownames.value cannot both be used at the same time" +msgstr "rownames и rownames.value нельзя использовать одновременно" + +#: data.table.R:2075 +#, c-format +msgid "" +"length(rownames)==%d but nrow(DT)==%d. The rownames argument specifies a " +"single column name or number. Consider rownames.value= instead." +msgstr "" +"length(rownames)==%d, но nrow(DT)==%d. Аргумент «rownames» задает имя или " +"номер одного столбца. Вместо него можно использовать rownames.value=." + +#: data.table.R:2079 +#, c-format +msgid "" +"length(rownames)==0 but should be a single column name or number, or NULL" +msgstr "length(rownames)==0, но должно быть имя или номер столбца, либо NULL" + +#: data.table.R:2083 +#, c-format +msgid "" +"rownames is TRUE but key has multiple columns %s; taking first column x[,1] " +"as rownames" +msgstr "" +"«rownames» - TRUE, но ключ имеет несколько столбцов %s; беру первый столбец " +"x[,1] в качестве «rownames»" + +#: data.table.R:2093 +#, c-format +msgid "'%s' is not a column of x" +msgstr "«%s» не является столбцом в x" + +#: data.table.R:2099 +#, c-format +msgid "" +"as.integer(rownames)==%d which is outside the column number range [1," +"ncol=%d]." +msgstr "" +"as.integer(rownames)==%d, что выходит за пределы диапазона номеров столбцов " +"[1,ncol=%d]." + +#: data.table.R:2104 +#, c-format +msgid "length(rownames.value)==%d but should be nrow(x)==%d" +msgstr "length(rownames.value)==%d, но должно быть nrow(x)==%d" + +#: data.table.R:2200 +#, c-format +msgid "" +"When i is a matrix in DT[i]<-value syntax, it doesn't make sense to provide j" +msgstr "" +"Когда в синтаксисе «DT[i]<-значение» «i» является матрицей, передавать «j» " +"бесполезно" + +#: data.table.R:2210 +#, c-format +msgid "j must be an atomic vector, see ?is.atomic" +msgstr "«j» должен быть атомарным вектором, см. ?is.atomic" + +#: data.table.R:2211 +#, c-format +msgid "NA in j" +msgstr "в «j» нашлись NA" + +#: data.table.R:2217 +#, c-format +msgid "j must be vector of column name or positions" +msgstr "«j» должен быть вектором имен или позиций столбцов" + +#: data.table.R:2218 +#, c-format +msgid "" +"Attempt to assign to column position greater than ncol(x). Create the column " +"by name, instead. This logic intends to catch (most likely) user errors." +msgstr "" +"Попытка присвоить столбцу под номером большим, чем ncol(x). Во избежание " +"ошибок, пожалуйста, создайте столбец по имени." + +#: data.table.R:2285 +#, c-format +msgid "" +"data.table inherits from data.frame (from v1.5), but this data.table does " +"not. Has it been created manually (e.g. by using 'structure' rather than " +"'data.table') or saved to disk using a prior version of data.table?" +msgstr "" +"Обычно data.table наследует от data.frame (начиная с версии 1.5), а эта data." +"table - нет. Была ли она создана вручную (например, с помощью 'structure', а " +"не 'data.table') или сохранена на диск с помощью предыдущей версии data." +"table?" + +#: data.table.R:2294 +#, c-format +msgid "attempting to assign invalid object to dimnames of a data.table" +msgstr "" +"попытка присвоить недопустимый объект атрибуту «dimnames» таблицы data.table" + +#: data.table.R:2295 +#, c-format +msgid "data.tables do not have rownames" +msgstr "у data.table не бывает «rownames»" + +#: data.table.R:2296 data.table.R:2665 +#, c-format +msgid "Can't assign %d names to a %d-column data.table" +msgstr "Невозможно присвоить %d имен data.table из %d столбцов" + +#: data.table.R:2360 +#, c-format +msgid "'subset' must evaluate to logical" +msgstr "Результатом вычисления «subset» должен быть логический вектор" + +#: data.table.R:2403 +#, c-format +msgid "Argument 'invert' must be logical TRUE/FALSE" +msgstr "Аргумент «invert» должен быть TRUE или FALSE" + +#: data.table.R:2444 +#, c-format +msgid "x argument must be a data.table" +msgstr "аргумент «x» должен быть data.table" + +#: data.table.R:2449 +#, c-format +msgid "group length is 0 but data nrow > 0" +msgstr "длина групп равна 0, но в данных > 0 строк" + +#: data.table.R:2451 +#, c-format +msgid "" +"passing 'f' argument together with 'by' is not allowed, use 'by' when split " +"by column in data.table and 'f' when split by external factor" +msgstr "" +"нельзя передавать аргумент «f» одновременно с «by». Используйте «by» при " +"разбиении по столбцам data.table, а «f» при разбиении по внешнему фактору" + +#: data.table.R:2459 +#, c-format +msgid "Either 'by' or 'f' argument must be supplied" +msgstr "Нужно передать либо аргумент «by», либо «f»" + +#: data.table.R:2461 +#, c-format +msgid "Column '.ll.tech.split' is reserved for split.data.table processing" +msgstr "" +"Имя столбца «.ll.tech.split» зарезервировано для внутренних нужд split.data." +"table" + +#: data.table.R:2462 +#, c-format +msgid "Column '.nm.tech.split' is reserved for split.data.table processing" +msgstr "" +"Имя столбца «.nm.tech.split» зарезервировано для внутренних нужд split.data." +"table" + +#: data.table.R:2463 +#, c-format +msgid "Argument 'by' must refer to column names in x" +msgstr "Аргумент «by» должен называть столбцы внутри «x»" + +#: data.table.R:2464 +#, c-format +msgid "" +"Argument 'by' must refer only to atomic-type columns, but the following " +"columns are non-atomic: %s" +msgstr "" +"Аргумент «by» должен называть только атомарные столбцы, но следующие " +"оказались не-атомарными: %s" + +#: data.table.R:2596 +#, c-format +msgid "" +"x is not a data.table|frame. Shallow copy is a copy of the vector of column " +"pointers (only), so is only meaningful for data.table|frame" +msgstr "" +"x не является data.table или data.frame. При «поверхностной» копии дублируют " +"только указатели на столбцы, поэтому данная операция имеет смысл только для " +"data.table или data.frame" + +#: data.table.R:2605 +#, c-format +msgid "setalloccol attempting to modify `*tmp*`" +msgstr "попытка модифицировать `*tmp*` в setalloccol" + +#: data.table.R:2640 +#, c-format +msgid "" +"Input is a length=1 logical that points to the same address as R's global " +"value. Therefore the attribute has not been set by reference, rather on a " +"copy. You will need to assign the result back to a variable. See issue #1281." +msgstr "" +"Передан логический вектор длины 1, адрес которого совпадает с адресом " +"глобальной переменной в R. Атрибут не был выставлен по ссылке; вместо этого " +"нужно присвоить возвращаемое значение переменной. См. отчёт об ошибке №1281." + +#: data.table.R:2655 +#, c-format +msgid "x is not a data.table or data.frame" +msgstr "x не является data.table или data.frame" + +#: data.table.R:2657 +#, c-format +msgid "x has %d columns but its names are length %d" +msgstr "в «x» %d столбцов, но его имена длины %d" + +#: data.table.R:2664 +#, c-format +msgid "Passed a vector of type '%s'. Needs to be type 'character'." +msgstr "Передан вектор типа '%s'. Должен быть типа 'character'." + +#: data.table.R:2677 +#, c-format +msgid "'new' is not a character vector or a function" +msgstr "'new' - ни строковой вектор, ни функция" + +#: data.table.R:2679 +#, c-format +msgid "NA in 'new' at positions %s" +msgstr "NA в 'new' на позициях %s" + +#: data.table.R:2680 +#, c-format +msgid "Some duplicates exist in 'old': %s" +msgstr "Некоторые элементы «old» дублированы: %s" + +#: data.table.R:2682 +#, c-format +msgid "'old' is type %s but should be integer, double or character" +msgstr "«old» имеет тип %s, но должен быть целым, дробным или строковым" + +#: data.table.R:2683 +#, c-format +msgid "'old' is length %d but 'new' is length %d" +msgstr "«old» длины %d, а «new» - длины %d" + +#: data.table.R:2684 +#, c-format +msgid "NA (or out of bounds) in 'old' at positions %s" +msgstr "" +"в «old» находится NA (или значение вне допустимого диапазона) на позиции %s" + +#: data.table.R:2687 +#, c-format +msgid "" +"Item %d of 'old' is '%s' which appears several times in column names. Just " +"the first will be changed. There are %d other items in 'old' that are also " +"duplicated in column names." +msgstr "" +"Элемент №%d в «old» - это «%s», что также встречается несколько раз в именах " +"столбцов. Будет изменен только первый из них. В «old» есть %d других " +"элементов, которые также дублируются в именах столбцов." + +#: data.table.R:2695 +#, c-format +msgid "" +"Items of 'old' not found in column names: %s. Consider skip_absent=TRUE." +msgstr "" +"Элементы «old» не найдены в именах столбцов: %s. Возможно, Вам нужно " +"skip_absent=TRUE." + +#: data.table.R:2736 +#, c-format +msgid "Provide either before= or after= but not both" +msgstr "Укажите либо before=, либо after=, но не оба варианта" + +#: data.table.R:2738 +#, c-format +msgid "before=/after= accept a single column name or number, not more than one" +msgstr "before=/after= принимают только одно имя или номер столбца" + +#: data.table.R:2795 +#, c-format +msgid "Input is %s but should be a plain list of items to be stacked" +msgstr "" +"Входное значение типа %s, но должно быть обычным списком элементов для " +"вертикальной конкатенации" + +#: data.table.R:2799 +#, c-format +msgid "" +"idcol must be a logical or character vector of length 1. If logical TRUE the " +"id column will named '.id'." +msgstr "" +"«idcol» должен быть логическим или строковым скаляром. Если TRUE, то столбец " +"идентификаторов будет назван «.id»." + +#: data.table.R:2804 +#, c-format +msgid "use.names=NA invalid" +msgstr "use.names=NA — неправильно" + +#: data.table.R:2806 +#, c-format +msgid "" +"use.names='check' cannot be used explicitly because the value 'check' is new " +"in v1.12.2 and subject to change. It is just meant to convey default " +"behavior. See ?rbindlist." +msgstr "" +"use.names='check' нельзя передавать явно, поскольку значение 'check' " +"добавлено в 1.12.2 и ещё может быть изменено. Чтобы использовать поведение " +"по умолчанию, не передавайте аргумент вовсе. См. ?rbindlist." + +#: data.table.R:2821 +#, c-format +msgid "" +"Check that is.data.table(DT) == TRUE. Otherwise, :=, `:=`(...) and let(...) " +"are defined for use in j, once only and in particular ways. Note that " +"namespace-qualification like data.table::`:=`(...) is not supported. See " +"help(\":=\")." +msgstr "" +"Убедитесь, что is.data.table(DT) == TRUE. В противном случае внутри " +"аргумента j можно использовать :=, `:=`(...) и let(...) только один раз и " +"определенным образом. Обратите внимание, что полное имя data.table::`:" +"=`(...) не поддерживается. См. help(\":=\")." + +#: data.table.R:2838 +#, c-format +msgid "" +"setDF only accepts data.table, data.frame or list of equal length as input" +msgstr "" +"setDF принимает в качестве входных данных только data.table, data.frame или " +"список векторов одинаковой длины" + +#: data.table.R:2839 +#, c-format +msgid "rownames contains duplicates" +msgstr "элементы rownames дублированы" + +#: data.table.R:2846 data.table.R:2857 data.table.R:2880 +#, c-format +msgid "rownames incorrect length; expected %d names, got %d" +msgstr "неправильная длина rownames: должно быть %d имен, получено %d" + +#: data.table.R:2865 +#, c-format +msgid "All elements in argument 'x' to 'setDF' must be of same length" +msgstr "" +"Все элементы в аргументе «x» функции setDF() должны быть одинаковой длины" + +#: data.table.R:2894 +#, c-format +msgid "Cannot find symbol %s" +msgstr "Не могу найти переменную %s" + +#: data.table.R:2901 +#, c-format +msgid "" +"Cannot convert '%1$s' to data.table by reference because binding is locked. " +"It is very likely that '%1$s' resides within a package (or an environment) " +"that is locked to prevent modifying its variable bindings. Try copying the " +"object to your current environment, ex: var <- copy(var) and then using " +"setDT again." +msgstr "" +"Не могу преобразовать '%1$s' в data.table по ссылке, поскольку переменная " +"заблокирована. Скорее всего, '%1$s' находится в пространстве имён пакета или " +"аналогичном заблокированном окружении. Попробуйте скопировать объект в " +"текущее окружение, например: var <- copy(var), а затем снова использовать " +"setDT." + +#: data.table.R:2955 +#, c-format +msgid "" +"Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table'" +msgstr "" +"Аргумент «x» для setDT() должен быть списком, data.frame или data.table" + +#: data.table.R:2970 +#, c-format +msgid "Item '%s' not found in names of input list" +msgstr "Не могу найти «%s» среди имён входного списка" + +#: data.table.R:3003 data.table.R:3028 +#, c-format +msgid "'prefix' must be NULL or a character vector of length 1." +msgstr "«prefix» должен быть NULL либо одной строкой." + +#: data.table.R:3006 data.table.R:3031 +#, c-format +msgid "x is a single vector, non-NULL 'cols' doesn't make sense." +msgstr "x - единичный вектор, передавать «cols» не-NULL бесполезно." + +#: data.table.R:3010 data.table.R:3035 +#, c-format +msgid "x is a list, 'cols' cannot be 0-length." +msgstr "«x» - список, нельзя передавать «cols» нулевой длины." + +#: data.table.R:3190 +#, c-format +msgid "" +"It looks like you re-used `:=` in argument %d a functional assignment call " +"-- use `=` instead: %s(col1=val1, col2=val2, ...)" +msgstr "" +"По-видимому, Вы использовали `:=` в аргументе №%d внутри функционального " +"присваивания. Пожалуйста, вместо этого используйте `=`: %s(col1=val1, " +"col2=val2, ...)" + +#: data.table.R:3256 +#, c-format +msgid "" +"RHS of %s is length %d which is not 1 or nrow (%d). For robustness, no " +"recycling is allowed (other than of length 1 RHS). Consider %%in%% instead." +msgstr "" +"Правая сторона %s — длины %d, что не равно 1 или количеству строк (%d). Для " +"надежности не допускается «повторное использование» векторов (кроме случая " +"длины 1). Попробуйте использовать %%in%%." + +#: data.table.R:3371 +#, c-format +msgid "" +"'on' argument should be a named atomic vector of column names indicating " +"which columns in 'i' should be joined with which columns in 'x'." +msgstr "" +"Аргумент «on» должен быть именованным атомарным вектором имен столбцов, " +"указывающим, какие столбцы в «i» должны быть объединены с какими столбцами в " +"«x»." + +#: data.table.R:3412 +#, c-format +msgid "" +"Found more than one operator in one 'on' statement: %s. Please specify a " +"single operator." +msgstr "" +"В «on» передан более чем один оператор: %s. Пожалуйста, передайте только " +"один оператор." + +#: data.table.R:3435 +#, c-format +msgid "" +"'on' contains no column name: %s. Each 'on' clause must contain one or two " +"column names." +msgstr "" +"Элемент «on» не содержит имени столбца: %s. Каждый элемент «on» должен " +"содержать одно или два имени столбцов." + +#: data.table.R:3437 +#, c-format +msgid "" +"'on' contains more than 2 column names: %s. Each 'on' clause must contain " +"one or two column names." +msgstr "" +"Элемент «on» содержит больше двух имён столбцов: %s. Каждый элемент «on» " +"должен содержать одно или два имени столбцов." + +#: data.table.R:3442 +#, c-format +msgid "Invalid join operators %s. Only allowed operators are %s." +msgstr "Недопустимые операторы соединения %s. Разрешены только %s." + +#: devel.R:16 +#, c-format +msgid "There is no package %s in provided repository." +msgstr "В данном репозитории нет пакета %s." + +#: devel.R:39 +msgid "R %s package has been updated to %s (%s)" +msgstr "R-пакет %s обновлён до версии %s (%s)" + +#: devel.R:41 +msgid "R %s package is up-to-date at %s (%s)" +msgstr "R-пакет %s уже самой свежей версии %s (%s)" + +#: duplicated.R:7 +#, c-format +msgid "'fromLast' must be TRUE or FALSE" +msgstr "'fromLast' должно быть TRUE или FALSE" + +#: duplicated.R:105 +#, c-format +msgid "x must be an atomic vector or a data.frame/data.table" +msgstr "x должен быть атомарным вектором или data.frame/data.table" + +#: fcast.R:7 +#, c-format +msgid "Using '%s' as value column. Use 'value.var' to override" +msgstr "" +"Использую '%s' в качестве столбца значений. Используйте «value.var», чтобы " +"задать другой" + +#: fcast.R:17 +#, c-format +msgid "" +"The %1$s generic in data.table has been passed a %2$s, but data.table::%1$s " +"currently only has a method for data.tables. Please confirm your input is a " +"data.table, with setDT(%3$s) or as.data.table(%3$s). If you intend to use a " +"method from reshape2, try installing that package first, but do note that " +"reshape2 is superseded and is no longer actively developed." +msgstr "" +"Общей функции %1$s в data.table было передано значение типа %2$s, но data." +"table::%1$s в настоящее время имеет метод только для data.table. Сделайте " +"входное значение data.table при помощи setDT(%3$s) или as.data.table(%3$s). " +"Если хотите использовать метод из reshape2, попробуйте сначала установить " +"этот пакет, но учтите, что reshape2 устарел и больше активно не развивается." + +#: fcast.R:24 +#, c-format +msgid "" +"Invalid formula. Cast formula should be of the form LHS ~ RHS, for e.g., a + " +"b ~ c." +msgstr "" +"Недопустимая формула. Формула для cast() должна иметь вид `левая часть` ~ " +"`правая часть`, например, a + b ~ c." + +#: fcast.R:31 +#, c-format +msgid "data.table to cast must have unique column names" +msgstr "У data.table для операции cast() должны быть уникальные имена столбцов" + +#: fcast.R:76 +#, c-format +msgid "value.var values %s are not found in 'data'." +msgstr "столбцы %s из «value.var» не найдены в «data»." + +#: fcast.R:92 +#, c-format +msgid "" +"When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be " +"either of length =1 or =length(fun.aggregate)." +msgstr "" +"Когда «fun.aggregate» и «value.var» являются списками, «value.var» должен " +"быть либо длины 1, либо такой же, как «fun.aggregate»." + +#: fcast.R:125 +#, c-format +msgid "'data' must be a data.table." +msgstr "«data» должно быть data.table." + +#: fcast.R:127 +#, c-format +msgid "'drop' must be logical TRUE/FALSE" +msgstr "«drop» должно быть TRUE или FALSE" + +#: fcast.R:129 +#, c-format +msgid "Argument 'value.var.in.dots' should be logical TRUE/FALSE" +msgstr "Аргумент «value.var.in.dots» должен быть TRUE или FALSE" + +#: fcast.R:131 +#, c-format +msgid "" +"Arguments 'value.var.in.LHSdots', 'value.var.in.RHSdots' should be logical " +"TRUE/FALSE" +msgstr "" +"Аргументы «value.var.in.LHSdots», «value.var.in.RHSdots» должны быть TRUE " +"или FALSE" + +#: fcast.R:148 +#, c-format +msgid "Column [%s] not found or of unknown type." +msgstr "Столбец [%s] не найден или неизвестного типа." + +#: fcast.R:163 +#, c-format +msgid "Columns specified in formula can not be of type list" +msgstr "Указанные в формуле столбцы не должны быть списками" + +#: fcast.R:178 +#, c-format +msgid "" +"'fun.aggregate' is NULL, but found duplicate row/column combinations, so " +"defaulting to length(). That is, the variables %s used in 'formula' do not " +"uniquely identify rows in the input 'data'. In such cases, 'fun.aggregate' " +"is used to derive a single representative value for each combination in the " +"output data.table, for example by summing or averaging (fun.aggregate=sum or " +"fun.aggregate=mean, respectively). Check the resulting table for values " +"larger than 1 to see which combinations were not unique. See ?dcast.data." +"table for more details." +msgstr "" +"'fun.aggregate' является NULL, но обнаружены дублирующиеся комбинации строк/" +"столбцов, поэтому использую length(). Иными словами, переменные %s, " +"используемые в «formula», не идентифицируют однозначно строки во «data». В " +"таких случаях используется 'fun.aggregate' для получения одного " +"репрезентативного значения для каждой комбинации в выходной таблице data." +"table, например, путем суммирования или усреднения (fun.aggregate=sum или " +"fun.aggregate=mean, соответственно). Посмотрите значения больше 1 в " +"возвращаемой таблице, чтобы узнать, какие комбинации не были уникальными. " +"Дополнительные сведения см. в ?dcast.data.table." + +#: fcast.R:188 +msgid "" +"Aggregating functions should take a vector as input and return a single " +"value (length=1), but they do not, so the result is undefined. Please fix by " +"modifying your function so that a single value is always returned." +msgstr "" +"Агрегирующие функции должны принимать на вход вектор и возвращать единичное " +"значение (длины 1), но это не выполняется, поэтому результат не определен. " +"Пожалуйста, исправьте это, изменив свою функцию так, чтобы она всегда " +"возвращала единственное значение." + +#: fdroplevels.R:12 +#, c-format +msgid "" +"droplevels() with in.place=TRUE is deprecated. Use setdroplevels() instead." +msgstr "" +"droplevels() в комбинации с in.place=TRUE больше не рекомендуется. Вместо " +"этого используйте setdroplevels()." + +#: fmelt.R:12 +#, c-format +msgid "" +"The %1$s generic in data.table has been passed a %2$s and will attempt to " +"redirect to the relevant reshape2 method; please note that reshape2 is " +"superseded and is no longer actively developed, and this redirection is now " +"deprecated. To continue using melt methods from reshape2 while both packages " +"are attached, e.g. melt.list, you can prepend the namespace, i.e. reshape2::" +"%1$s(%3$s). In the next version, this warning will become an error." +msgstr "" +"Общая функция %1$s в data.table получила значение %2$s и попытается передать " +"его соответствующемому методу reshape2; обратите внимание, что reshape2 " +"больше не развивается и это перенаправление теперь устарело. Чтобы " +"продолжить использовать метод melt из reshape2, когда оба пакета подключены " +"(например, melt.list), указывайте полное имя функции, например, reshape2::" +"%1$s(%3$s). В следующей версии это предупреждение превратится в ошибку." + +#: fmelt.R:19 fmelt.R:73 +#, c-format +msgid "cols must be a character vector of column names" +msgstr "«cols» должен быть строковым вектором имён столбцов" + +#: fmelt.R:24 +#, c-format +msgid "Input patterns must be of type character." +msgstr "Шаблоны должны быть строками." + +#: fmelt.R:42 +#, c-format +msgid "" +"each ... argument to measure must be either a symbol without argument name, " +"or a function with argument name, problems: %s" +msgstr "" +"каждый аргумент в ... для функции measure() должен быть либо символом без " +"имени аргумента, либо функцией с заданным именем аргумента, что не так для: " +"%s" + +#: fmelt.R:50 +#, c-format +msgid "" +"group names specified in ... conflict with measure argument names; please " +"fix by changing group names: %s" +msgstr "" +"имена групп, указанные в ..., конфликтуют с именами аргументов measure(); " +"пожалуйста, исправьте это, изменив имена групп: %s" + +#: fmelt.R:56 +#, c-format +msgid "" +"each ... argument to measure must be a function with at least one argument, " +"problem: %s" +msgstr "" +"каждый аргумент в ... для функции measure() должен быть функцией с хотя бы " +"одним аргументом, что не так для: %s" + +#: fmelt.R:67 +#, c-format +msgid "" +"both sep and pattern arguments used; must use either sep or pattern (not " +"both)" +msgstr "" +"одновременно переданы аргументы «sep» и «pattern»; необходимо использовать " +"либо «sep», либо «pattern», но не оба сразу" + +#: fmelt.R:70 +#, c-format +msgid "multiple.keyword must be a character string with nchar>0" +msgstr "«multiple.keyword» должно быть непустой строкой" + +#: fmelt.R:81 +#, c-format +msgid "in measurev, elements of fun.list must be named, problems: %s" +msgstr "" +"В функции measurev(), элементы fun.list должны быть именованными, но это не " +"так для: %s" + +#: fmelt.R:84 +#, c-format +msgid "elements of fun.list should be uniquely named, problems: %s" +msgstr "элементы fun.list должны иметь уникальные имена, что не так для: %s" + +#: fmelt.R:89 +#, c-format +msgid "pattern must be character string" +msgstr "«pattern» должно быть строкой" + +#: fmelt.R:94 +#, c-format +msgid "" +"pattern did not match any cols, so nothing would be melted; fix by changing " +"pattern" +msgstr "" +"«pattern» не подошло ни к одному из столбцов, поэтому не изменяю форму " +"данных; пожалуйста, исправьте «pattern»" + +#: fmelt.R:98 +#, c-format +msgid "" +"pattern must contain at least one capture group (parenthesized sub-pattern)" +msgstr "" +"регулярное выражение в «pattern» должно захватывать фрагменты текста (при " +"помощи под-выражений в скобках)" + +#: fmelt.R:101 +#, c-format +msgid "" +"number of elements of fun.list (%d) must be the same as the number of " +"capture groups in pattern (%d)" +msgstr "" +"количество элементов «fun.list» (%d) должно совпадать с количеством групп " +"захвата в «pattern» (%d)" + +#: fmelt.R:109 +#, c-format +msgid "sep must be character string" +msgstr "«sep» должен быть строкой" + +#: fmelt.R:115 +#, c-format +msgid "" +"each column name results in only one item after splitting using sep, which " +"means that all columns would be melted; to fix please either specify melt on " +"all columns directly without using measure, or use a different sep/pattern " +"specification" +msgstr "" +"Каждое имя столбца дает только один элемент после разделения с помощью sep, " +"что означает, что все столбцы будут переработаны; пожалуйста, либо явным " +"образом передайте melt() все столбцы без использования measure(), либо " +"передайте другие «sep» и «pattern»" + +#: fmelt.R:118 +#, c-format +msgid "" +"number of elements of fun.list (%d) must be the same as the max number of " +"items after splitting column names (%d)" +msgstr "" +"количество элементов «fun.list» (%d) должно совпадать с максимальным " +"количеством элементов после разбиения имён столбцов (%d)" + +#: fmelt.R:125 +#, c-format +msgid "measured columns should be uniquely named, problems: %s" +msgstr "столбцы-измерения должны иметь уникальные имена, что не так для: %s" + +#: fmelt.R:129 +#, c-format +msgid "" +"number of unique column IDs =%d is less than number of melted columns =%d; " +"fix by changing pattern/sep" +msgstr "" +"количество уникальных идентификаторов столбцов =%d меньше, чем количество " +"переработанных столбцов =%d; пожалуйста, исправьте «pattern» и/или «sep»" + +#: fmelt.R:139 +#, c-format +msgid "" +"in the measurev fun.list, each non-NULL element must be a function with at " +"least one argument, problem: %s" +msgstr "" +"в measurev(), каждый не-NULL элемент «fun.list» должен быть функцией с хотя " +"бы одним аргументом, что не так для: %s" + +#: fmelt.R:143 +#, c-format +msgid "" +"each conversion function must return an atomic vector with same length as " +"its first argument, problem: %s" +msgstr "" +"каждая функция преобразования должна возвращать атомарный вектор той же " +"длины, что и ее первый аргумент, что не так для: %s" + +#: fmelt.R:146 +#, c-format +msgid "%s conversion function returned vector of all NA" +msgstr "функция преобразования %s вернула вектор из всех NA" + +#: fmelt.R:152 +#, c-format +msgid "" +"number of unique groups after applying type conversion functions less than " +"number of groups, change type conversion" +msgstr "" +"количество уникальных групп после применения функций преобразования типов " +"меньше исходного количества групп; пожалуйста, исправьте функции " +"преобразования типов" + +#: fmelt.R:157 +#, c-format +msgid "" +"%s column class=%s after applying conversion function, but must be character" +msgstr "" +"после применения функции преобразования, класс столбца «%s» равен «%s», а " +"должен быть «character»" + +#: fmelt.R:161 +#, c-format +msgid "%s is the only group; fix by creating at least one more group" +msgstr "«%s» - единственная группа; пожалуйста, сделайте больше одной группы" + +#: fmelt.R:184 +#, c-format +msgid "'data' must be a data.table" +msgstr "«data» должна быть data.table" + +#: fmelt.R:203 +#, c-format +msgid "" +"'value.name' provided in both 'measure.vars' and 'value.name argument'; " +"value provided in 'measure.vars' is given precedence." +msgstr "" +"«value.name» указано и в «measure.vars» (как имена списка), и в аргументе " +"«value.name»; отдаю приоритет аргументу «measure.vars»." + +#: fmelt.R:206 +#, c-format +msgid "Please provide a name to each element of 'measure.vars'." +msgstr "Пожалуйста, дайте имя каждому элементу «measure.vars»." + +#: foverlaps.R:3 +#, c-format +msgid "" +"y and x must both be data.tables. Use `setDT()` to convert list/data.frames " +"to data.tables by reference or as.data.table() to convert to data.tables by " +"copying." +msgstr "" +"«y» и «x» должны быть data.table. Используйте `setDT()` для преобразования " +"списков или data.frame в data.table по на месте или as.data.table() для " +"преобразования в data.table путем копирования." + +#: foverlaps.R:9 +#, c-format +msgid "maxgap must be a non-negative integer value of length 1" +msgstr "«maxgap» должно быть неотрицательным целым скаляром" + +#: foverlaps.R:11 +#, c-format +msgid "minoverlap must be a positive integer value of length 1" +msgstr "«minoverlap» должно быть положительным целым скаляром" + +#: foverlaps.R:13 +#, c-format +msgid "which must be a logical vector of length 1. Either TRUE/FALSE" +msgstr "«which» должно быть либо TRUE, либо FALSE" + +#: foverlaps.R:15 +#, c-format +msgid "nomatch must either be NA or NULL" +msgstr "«nomatch» должно быть либо NA, либо NULL" + +#: foverlaps.R:20 +#, c-format +msgid "maxgap and minoverlap arguments are not yet implemented." +msgstr "Аргументы «maxgap» и «minoverlap» пока не реализованы." + +#: foverlaps.R:22 +#, c-format +msgid "" +"y must be keyed (i.e., sorted, and, marked as sorted). Call setkey(y, ...) " +"first, see ?setkey. Also check the examples in ?foverlaps." +msgstr "" +"«y» должен быть отсортирован по ключу (т.е. отсортирован и помечен как " +"отсортированный). Сначала вызовите setkey(y, ...), см. ?setkey. Также " +"посмотрите примеры в ?foverlaps." + +#: foverlaps.R:24 +#, c-format +msgid "" +"'by.x' and 'by.y' should contain at least two column names (or numbers) each " +"- corresponding to 'start' and 'end' points of intervals. Please see ?" +"foverlaps and examples for more info." +msgstr "" +"«by.x» и «by.y» должны содержать как минимум по два имени (или номера) " +"столбцов, соответствующих началу и концу интервалов. Дополнительную " +"информацию см. в ?foverlaps и его примерах." + +#: foverlaps.R:27 +#, c-format +msgid "" +"Invalid numeric value for 'by.x'; it should be a vector with values 1 <= by." +"x <= length(x)" +msgstr "" +"Недопустимое числовое значение для «by.x»; это должен быть вектор со " +"значениями 1 <= by.x <= length(x)" + +#: foverlaps.R:32 +#, c-format +msgid "" +"Invalid numeric value for 'by.y'; it should be a vector with values 1 <= by." +"y <= length(y)" +msgstr "" +"Недопустимое числовое значение для «by.y»; это должен быть вектор со " +"значениями 1 <= by.y <= length(x)" + +#: foverlaps.R:36 +#, c-format +msgid "A non-empty vector of column names or numbers is required for by.x" +msgstr "Для «by.x» требуется непустой вектор имен или номеров столбцов" + +#: foverlaps.R:38 +#, c-format +msgid "A non-empty vector of column names or numbers is required for by.y" +msgstr "Для «by.y» требуется непустой вектор имен или номеров столбцов" + +#: foverlaps.R:40 +#, c-format +msgid "" +"The first %d columns of y's key must be identical to the columns specified " +"in by.y." +msgstr "" +"Первые %d столбцов ключа сортировки «y» должны быть идентичны столбцам, " +"указанным в «by.y»." + +#: foverlaps.R:42 +#, c-format +msgid "Elements listed in 'by.x' must be valid names in data.table x" +msgstr "Элементы, перечисленные в «by.x», должны быть именами столбцов «x»" + +#: foverlaps.R:44 +#, c-format +msgid "" +"Duplicate columns are not allowed in overlap joins. This may change in the " +"future." +msgstr "" +"Дублирование столбцов не допускается в соединениях с перекрытием. В будущем " +"это может измениться." + +#: foverlaps.R:46 +#, c-format +msgid "" +"length(by.x) != length(by.y). Columns specified in by.x should correspond to " +"columns specified in by.y and should be of same lengths." +msgstr "" +"length(by.x) != length(by.y). «by.x» должен указывать столбцы, " +"соответствующие «by.y», в том числе по количеству." + +#: foverlaps.R:57 +#, c-format +msgid "" +"The last two columns in by.x should correspond to the 'start' and 'end' " +"intervals in data.table x and must be integer/numeric type." +msgstr "" +"Последние два столбца в «by.x» должны соответствовать началу и концу " +"интервала в «x» и должны быть (цело)численными." + +#: foverlaps.R:61 foverlaps.R:63 foverlaps.R:70 foverlaps.R:72 +#, c-format +msgid "" +"NA values in data.table %s '%s' column: '%s'. All rows with NA values in the " +"range columns must be removed for foverlaps() to work." +msgstr "" +"Значения NA в столбце «%2$s» аргумента %1$s: '%3$s'. Для работы функции " +"foverlaps() необходимо удалить все строки со значениями NA в столбцах " +"диапазона." + +#: foverlaps.R:64 +#, c-format +msgid "" +"All entries in column '%s' should be <= corresponding entries in column '%s' " +"in data.table x." +msgstr "" +"Все записи в столбце «%s» должны быть <= соответствующим записям в столбце " +"«%s» аргумента «x»." + +#: foverlaps.R:67 +#, c-format +msgid "" +"The last two columns in by.y should correspond to the 'start' and 'end' " +"intervals in data.table y and must be integer/numeric type." +msgstr "" +"Последние два столбца в «by.y» должны соответствовать началу и концу " +"интервала в «y» и должны быть (цело)численными." + +#: foverlaps.R:73 +#, c-format +msgid "" +"All entries in column '%s' should be <= corresponding entries in column '%s' " +"in data.table y." +msgstr "" +"Все записи в столбце «%s» должны быть <= соответствующим записям в столбце " +"«%s» аргумента «y»." + +#: foverlaps.R:78 +#, c-format +msgid "" +"Some interval cols are of type POSIXct while others are not. Please ensure " +"all interval cols are (or are not) of POSIXct type" +msgstr "" +"Некоторые интервальные столбцы являются POSIXct, а другие - нет. Убедитесь, " +"что все интервальные столбцы одновременно являются или не являются POSIXct" + +#: foverlaps.R:84 +#, c-format +msgid "" +"POSIXct interval cols have mixed timezones. Overlaps are performed on the " +"internal numerical representation of POSIXct objects (always in UTC epoch " +"time), therefore printed values may give the impression that values don't " +"overlap but their internal representations do Please ensure that POSIXct " +"type interval cols have identical 'tzone' attributes to avoid confusion." +msgstr "" +"У интервальных столбцов типа POSIXct различаются часовые пояса. Вычисление " +"происходит во внутреннем представлении POSIXct (эквивалентном UTC), поэтому " +"при печати значений может создаться ошибочное впечатление об отсутствии " +"перекрывания. Во избежание путаницы сделайте всем интервальным столбцам типа " +"POSIXct одинаковые атрибуты 'tzone'." + +#: foverlaps.R:165 foverlaps.R:167 foverlaps.R:171 +#, c-format +msgid "Not yet implemented" +msgstr "Пока не реализовано" + +#: foverlaps.R:170 +#, c-format +msgid "maxgap > minoverlap. maxgap will have no effect here." +msgstr "«maxgap» > «minoverlap». «maxgap» не окажет никакого влияния." + +#: frank.R:3 +#, c-format +msgid "length(na.last) = 0" +msgstr "length(na.last) = 0" + +#: frank.R:5 +#, c-format +msgid "length(na.last) > 1, only the first element will be used" +msgstr "length(na.last) > 1, использую только первый элемент" + +#: frank.R:17 +#, c-format +msgid "x is a single vector, non-NULL 'cols' doesn't make sense" +msgstr "«x» - единичный вектор, не-NULL «cols» бессмысленно" + +#: frank.R:23 +#, c-format +msgid "x is a list, 'cols' can not be 0-length" +msgstr "«x» - список, «cols» не должно быть нулевой длины" + +#: frank.R:31 +#, c-format +msgid "" +"Input column '..na_prefix..' conflicts with data.table internal usage; " +"please rename" +msgstr "" +"Входной столбец «..na_prefix..» конфликтует с деталями реализации data." +"table; пожалуйста, переименуйте его" + +#: frank.R:46 +#, c-format +msgid "" +"Input column '..stats_runif..' conflicts with data.table internal usage; " +"please rename" +msgstr "" +"Входной столбец «..stats_runif..» конфликтует с деталями реализации data." +"table; пожалуйста, переименуйте его" + +#: fread.R:12 +#, c-format +msgid "Used more than one of the arguments input=, file=, text= and cmd=." +msgstr "Передано более одного аргумента input=, file=, text= и cmd=." + +#: fread.R:25 +#, c-format +msgid "Argument 'encoding' must be 'unknown', 'UTF-8' or 'Latin-1'." +msgstr "Аргумент «encoding» должен быть 'unknown', 'UTF-8' или 'Latin-1'." + +#: fread.R:44 +#, c-format +msgid "'text=' is type %s but must be character." +msgstr "«text=» имеет тип %s, но должен быть строковым." + +#: fread.R:57 +#, c-format +msgid "" +"input= must be a single character string containing a file name, a system " +"command containing at least one space, a URL starting 'http[s]://', " +"'ftp[s]://' or 'file://', or, the input data itself containing at least one " +"\\n or \\r" +msgstr "" +"«input=» должно быть скалярной строкой, содержащей имя файла, системную " +"команду, содержащую хотя бы один пробел, URL, начинающийся с 'http[s]://', " +"'ftp[s]://' или 'file://', или сами входные данные, содержащие хотя бы один " +"\\n или \\r" + +#: fread.R:62 +#, c-format +msgid "" +"input= contains no \\n or \\r, but starts with a space. Please remove the " +"leading space, or use text=, file= or cmd=" +msgstr "" +"input= не содержит \\n или \\r, но начинается с пробела. Пожалуйста, уберите " +"пробелы или используйте text=, file= или cmd=" + +#: fread.R:66 +#, c-format +msgid "" +"Taking input= as a system command because it contains a space ('%s'). If " +"it's a filename please remove the space, or use file= explicitly. A variable " +"is being passed to input= and when this is taken as a system command there " +"is a security concern if you are creating an app, the app could have a " +"malicious user, and the app is not running in a secure environment; e.g. the " +"app is running as root. Please read item 5 in the NEWS file for v1.11.6 for " +"more information and for the option to suppress this message." +msgstr "" +"Считаю input= системной командой, потому что аргумент содержит пробел " +"('%s'). Если это имя файла, уберите пробел или используйте file= явно. Может " +"быть опасно передавать в «input=» переменную, контролируемую пользователем, " +"если не ожидать, что пользователь передаст команду, которая будет выполнена " +"с правами текущего процесса R. Пожалуйста, ознакомьтесь с пунктом 5 в файле " +"NEWS для версии 1.11.6 для получения дополнительной информации и возможности " +"подавления этого сообщения." + +#: fread.R:79 +#, c-format +msgid "" +"file= must be a single character string containing a filename, or URL " +"starting 'http[s]://', 'ftp[s]://' or 'file://'" +msgstr "" +"file= должен быть строкой из одного символа, содержащей имя файла или URL, " +"начинающийся с 'http[s]://', 'ftp[s]://' или 'file://'" + +#: fread.R:92 +#, c-format +msgid "File '%s' does not exist or is non-readable. getwd()=='%s'" +msgstr "Файл «%s» не существует или является нечитаемым. getwd()=='%s'" + +#: fread.R:93 +#, c-format +msgid "File '%s' is a directory. Not yet implemented." +msgstr "" +"Файл «%s» является директорией. Пока что не умею читать целые директории." + +#: fread.R:95 +#, c-format +msgid "File '%s' has size 0. Returning a NULL %s." +msgstr "Размер файла «%s» = 0. Возвращаю NULL %s." + +#: fread.R:107 +#, c-format +msgid "" +"Compressed files containing more than 1 file are currently not supported." +msgstr "Архивы, содержащие более 1 файла, в настоящее время не поддерживаются." + +#: fread.R:117 +#, c-format +msgid "" +"To read %s files directly, fread() requires 'R.utils' package which cannot " +"be found. Please install 'R.utils' using 'install.packages('R.utils')'." +msgstr "" +"Для прямого чтения файлов %s функция fread() требует пакет «R.utils»; не " +"могу его загрузить. Пожалуйста, установите «R.utils» с помощью install." +"packages('R.utils')." + +#: fread.R:127 +#, c-format +msgid "" +"'autostart' is deprecated. Consider skip='string' or skip=n. This argument " +"will be removed in the next release." +msgstr "" +"'autostart' больше не рекомендуется использовать. Возможно, Вам нужно " +"skip='строка' или skip=число. В следующей версии данный аргумент будет " +"удалён." + +#: fread.R:129 +#, c-format +msgid "" +"colClasses is type 'logical' which is ok if all NA but it has some TRUE or " +"FALSE values in it which is not allowed. Please consider the drop= or " +"select= argument instead. See ?fread." +msgstr "" +"colClasses имеет тип 'logical', что было бы приемлемо, если бы он состоял из " +"NA, но в нем есть некоторые значения TRUE или FALSE, что недопустимо. Вместо " +"этого используйте аргумент drop= или select=. См. ?fread." + +#: fread.R:133 +#, c-format +msgid "colClasses is not type list or character vector" +msgstr "colClasses не является списком типов или вектором строк" + +#: fread.R:138 +#, c-format +msgid "" +"colClasses=\"NULL\" (quoted) is interpreted as colClasses=NULL (the default) " +"as opposed to dropping every column." +msgstr "" +"интерпретирую colClasses=\"NULL\" (в кавычках) как colClass=NULL (значение " +"по умолчанию) вместо того, чтобы отбросить все столбцы." + +#: fread.R:150 +#, c-format +msgid "na.strings[%d]==\"%s\" consists only of whitespace, ignoring" +msgstr "" +"na.strings[%d]==\"%s\" состоит только из пробельных символов, игнорирую" + +#: fread.R:153 +#, c-format +msgid "" +"%s. Since strip.white=TRUE (default), use na.strings=\"\" to specify that " +"any number of spaces in a string column should be read as ." +msgstr "" +"%s. Поскольку strip.white=TRUE (по умолчанию), используйте na.strings=\"\", " +"чтобы указать, что любое количество пробелов в строковом столбце нужно " +"читать как ." + +#: fread.R:155 +#, c-format +msgid "" +"%s. strip.white==TRUE (default) and \"\" is present in na.strings, so any " +"number of spaces in string columns will already be read as ." +msgstr "" +"%s. Поскольку strip.white==TRUE (по умолчанию) и «na.strings» содержит \"\", " +"любое количество пробелов в строковых столбцах уже будет прочитано как ." + +#: fread.R:159 +#, c-format +msgid "" +"%s. But strip.white=FALSE. Use strip.white=TRUE (default) together with na." +"strings=\"\" to turn any number of spaces in string columns into " +msgstr "" +"%s. Но strip.white=FALSE. Используйте strip.white=TRUE (по умолчанию) вместе " +"с na.strings=\"\", чтобы превратить любое количество пробелов в строковых " +"столбцах в " + +#: fread.R:166 +#, c-format +msgid "" +"'data.table' relies on the package 'yaml' to parse the file header; please " +"add this to your library with install.packages('yaml') and try again." +msgstr "" +"Для разбора заголовка файла 'data.table' использует пакет 'yaml'; установите " +"его в свою библиотеку с помощью install.packages('yaml') и повторите попытку." + +#: fread.R:170 +#, c-format +msgid "" +"Combining a search string as 'skip' and reading a YAML header may not work " +"as expected -- currently, reading will proceed to search for 'skip' from the " +"beginning of the file, NOT from the end of the metadata; please file an " +"issue on GitHub if you'd like to see more intuitive behavior supported." +msgstr "" +"Сочетание аргумента «skip» как строки для поиска и чтения заголовка YAML " +"может работать не так, как ожидается: в настоящее время при чтении будет " +"выполняться поиск «skip» с начала файла, а не с конца метаданных; " +"пожалуйста, подайте заявку на наш трекер GitHub, если хотите, чтобы " +"поддерживалось более интуитивное поведение." + +#: fread.R:180 +#, c-format +msgid "" +"Encountered <%s%s> at the first unskipped line (%d), which does not " +"constitute the start to a valid YAML header (expecting something matching " +"regex \"%s\"); please check your input and try again." +msgstr "" +"Нашлось «%s%s» в первой непропущенной строке (%d), что не является началом " +"корректного заголовка YAML (ожидается что-то, соответствующее регулярному " +"выражению \"%s\"); пожалуйста, проверьте ваш ввод и повторите попытку." + +#: fread.R:192 +#, c-format +msgid "" +"Reached the end of the file before finding a completion to the YAML header. " +"A valid YAML header is bookended by lines matching the regex \"%s\". Please " +"double check the input file is a valid csvy." +msgstr "" +"Достигнут конец файла, а заголовок YAML так и не закончился. Правильный YAML-" +"заголовок состоит из строк, соответствующих регулярному выражению \"%s\". " +"Пожалуйста, убедитесь, что входной файл является корректным CSVY." + +#: fread.R:206 +#, c-format +msgid "User-supplied 'header' will override that found in metadata." +msgstr "" +"Переданный аргумент «header» переопределяет тот, который указан в метаданных." + +#: fread.R:224 +#, c-format +msgid "" +"User-supplied column names in 'col.names' will override those found in YAML " +"metadata." +msgstr "" +"Заданные пользователем имена столбцов в «col.names» переопределяют имена, " +"указанные в метаданных YAML." + +#: fread.R:233 +#, c-format +msgid "" +"colClasses dictated by user input and those read from YAML header are in " +"conflict (specifically, for column(s) [%s]); the proceeding assumes the user " +"input was an intentional override and will ignore the type(s) implied by the " +"YAML header; please exclude the column(s) from colClasses if this was " +"unintentional." +msgstr "" +"Классы «colClasses», заданные пользователем, и классы, считанные из " +"заголовка YAML, противоречат друг другу (в частности, для столбца(ов) [%s]); " +"отдаю приоритет переданному аргументу, а не заголовку YAML. Пожалуйста, " +"исключите столбец(ы) из colClasses, если это было непреднамеренно." + +#: fread.R:254 +#, c-format +msgid "User-supplied 'sep' will override that found in metadata." +msgstr "" +"Переданный аргумент «sep» переопределяет значение, найденное в метаданных." + +#: fread.R:259 +#, c-format +msgid "User-supplied 'quote' will override that found in metadata." +msgstr "" +"Переданный аргумент «quote» переопределяет значение, найденное в метаданных." + +#: fread.R:264 +#, c-format +msgid "User-supplied 'dec' will override that found in metadata." +msgstr "" +"Переданный аргумент «dec» переопределяет значение, найденное в метаданных." + +#: fread.R:268 +#, c-format +msgid "User-supplied 'na.strings' will override that found in metadata." +msgstr "" +"Переданный аргумент «na.strings» переопределяет значение, найденное в " +"метаданных." + +#: fread.R:320 +msgid "" +"Column '%s' was requested to be '%s' but fread encountered the following " +"warning:\n" +"\t%s\n" +"so the column has been left as type '%s'" +msgstr "" +"Столбец '%s' нужно было считать как '%s', но при приведении типов внутри " +"fread() возникло предупреждение:\n" +"\t%s\n" +"поэтому столбец был оставлен как тип '%s'" + +#: fread.R:322 +msgid "" +"Column '%s' was requested to be '%s' but fread encountered the following " +"error:\n" +"\t%s\n" +"so the column has been left as type '%s'" +msgstr "" +"Столбец '%s' нужно было считать как '%s', но при приведении типов внутри " +"fread() произошла ошибка:\n" +"\t%s\n" +"поэтому столбец был оставлен как тип '%s'" + +#: fread.R:349 +#, c-format +msgid "" +"key argument of data.table() must be a character vector naming columns (NB: " +"col.names are applied before this)" +msgstr "" +"аргументом «key» функции data.table() должен быть строковой вектор с именами " +"столбцов (NB: с учётом «col.names»)" + +#: fread.R:357 +#, c-format +msgid "" +"index argument of data.table() must be a character vector naming columns " +"(NB: col.names are applied before this)" +msgstr "" +"аргументом «index» функции data.table() должен быть строковой вектор с " +"именами столбцов (NB: с учётом «col.names»)" + +#: fwrite.R:20 +#, c-format +msgid "Argument 'encoding' must be '', 'UTF-8' or 'native'." +msgstr "Аргумент «encoding» должен быть '', 'UTF-8' или 'native'." + +#: fwrite.R:27 +#, c-format +msgid "logicalAsInt has been renamed logical01 for consistency with fread." +msgstr "" +"«logicalAsInt» теперь называется «logical01» для единообразия с fread()." + +#: fwrite.R:36 +#, c-format +msgid "x being coerced from class: matrix to data.table" +msgstr "преобразую «x» из класса matrix в data.table" + +#: fwrite.R:83 +#, c-format +msgid "" +"If you intended to overwrite the file at %s with an empty one, please use " +"file.remove first." +msgstr "" +"Если Вы хотите перезаписать файл %s пустым файлом, сначала удалите его при " +"помощи file.remove()." + +#: fwrite.R:84 +#, c-format +msgid "Input has no columns; doing nothing.%s" +msgstr "Нет столбцов, нечего записывать.%s" + +#: fwrite.R:87 +#, c-format +msgid "Input has no columns; creating an empty file at '%s' and exiting." +msgstr "Входные данные не содержат столбцов; создаю пустой файл «%s»." + +#: fwrite.R:95 +#, c-format +msgid "" +"'data.table' relies on the package 'yaml' to write the file header; please " +"add this to your library with install.packages('yaml') and try again." +msgstr "" +"Для записи заголовка файла 'data.table' использует пакет 'yaml'; установите " +"его в свою библиотеку с помощью install.packages('yaml') и повторите попытку." + +#: groupingsets.R:7 groupingsets.R:25 groupingsets.R:47 +#, c-format +msgid "Argument 'x' must be a data.table object" +msgstr "Аргумент «x» должен быть объектом data.table" + +#: groupingsets.R:9 groupingsets.R:27 groupingsets.R:53 +#, c-format +msgid "" +"Argument 'by' must be a character vector of column names used in grouping." +msgstr "" +"Аргумент «by» должен представлять собой строковый вектор имен столбцов, " +"используемых при группировке." + +#: groupingsets.R:11 groupingsets.R:29 groupingsets.R:59 +#, c-format +msgid "Argument 'id' must be a logical scalar." +msgstr "Аргумент «id» должен быть логическим скаляром." + +#: groupingsets.R:31 +#, c-format +msgid "Argument 'j' is required" +msgstr "Аргумент «j» обязателен" + +#: groupingsets.R:49 +#, c-format +msgid "" +"Argument 'x' is a 0-column data.table; no measure to apply grouping over." +msgstr "" +"Аргумент «x» - это data.table с 0 столбцов, поэтому группировать нечего." + +#: groupingsets.R:51 +#, c-format +msgid "Input data.table must not contain duplicate column names." +msgstr "Имена столбцов во входной data.table не должны повторяться." + +#: groupingsets.R:55 +#, c-format +msgid "Argument 'by' must have unique column names for grouping." +msgstr "" +"Аргумент «by» должен содержать неповторяющиеся имена столбцов для " +"группировки." + +#: groupingsets.R:57 +#, c-format +msgid "Argument 'sets' must be a list of character vectors." +msgstr "Аргумент «sets» должен быть списком строковых векторов." + +#: groupingsets.R:63 +#, c-format +msgid "" +"Argument 'label', if not NULL, must be a scalar or a named list of scalars." +msgstr "" +"Аргумент «label», если не NULL, должен быть скаляром или именованным списком " +"скаляров." + +#: groupingsets.R:65 +#, c-format +msgid "" +"When argument 'label' is a list, all of the list elements must be named." +msgstr "" +"Когда аргумент «label» является списком, у всех его элементов должны быть " +"имена." + +#: groupingsets.R:67 +#, c-format +msgid "" +"When argument 'label' is a list, the element names must not contain " +"duplicates." +msgstr "" +"Когда аргумент «label» является списком, имена его элементов не должны " +"дублироваться." + +#: groupingsets.R:70 +#, c-format +msgid "" +"All columns used in 'sets' argument must be in 'by' too. Columns used in " +"'sets' but not present in 'by': %s" +msgstr "" +"Все столбцы, указанные в аргументе «sets», должны присутствовать и в " +"аргументе «by». Столбцы, используемые в «sets», но отсутствующие в «by»: %s" + +#: groupingsets.R:72 +#, c-format +msgid "" +"When using `id=TRUE` the 'x' data.table must not have a column named " +"'grouping'." +msgstr "" +"При использовании `id=TRUE` в «x» не должно быть столбца с именем 'grouping'." + +#: groupingsets.R:74 +#, c-format +msgid "" +"Character vectors in 'sets' list must not have duplicated column names " +"within a single grouping set." +msgstr "" +"Строковые векторы в списке «sets» не должны содержать дублирующихся имен " +"столбцов в пределах одного набора группировки." + +#: groupingsets.R:76 +#, c-format +msgid "" +"'sets' contains a duplicate (i.e., equivalent up to sorting) element at " +"index %d; as such, there will be duplicate rows in the output -- note that " +"grouping by A,B and B,A will produce the same aggregations. Use " +"`sets=unique(lapply(sets, sort))` to eliminate duplicates." +msgstr "" +"«sets» содержит дублирующийся (с точностью до перестановки) элемент с " +"индексом %d, поэтому в выводе будут дублирующиеся строки: обратите внимание, " +"что группировка по A,B и B,A даст одинаковые агрегаты. Используйте " +"`sets=unique(lapply(sets, sort))` для устранения дубликатов." + +#: groupingsets.R:82 +#, c-format +msgid "" +"When argument 'label' is a list, all element names must be (1) in 'by', or " +"(2) the first element of the class in the data.table 'x' of a variable in " +"'by', or (3) one of %s. Element names not satisfying this condition: %s" +msgstr "" +"Когда аргумент «label» является списком, имена всех его элементов должны " +"быть (1) в «by», или (2) среди первых элементом класса столбцов из «by» " +"аргумента «x», или (3) в %s. Это не выполняется для: %s" + +#: groupingsets.R:92 +#, c-format +msgid "%s (label: %s; data: %s)" +msgstr "%s (label: %s, данные: %s)" + +#: groupingsets.R:96 +#, c-format +msgid "" +"When argument 'label' is a list, the class of each 'label' element with name " +"in 'by' must match the class of the corresponding column of the data.table " +"'x'. Class mismatch for: %s" +msgstr "" +"Когда аргумент «label» является списком, классы всех его элементов, имена " +"которых встречаются в «by», должны совпадать с классами соответствующих " +"столбцов таблицы «x». Это не выполняется для: %s" + +#: groupingsets.R:100 +#, c-format +msgid "(label name: %s; label class[1]: %s)" +msgstr "(имя из «label»: %s; class[1] из «label»: %s)" + +#: groupingsets.R:103 +#, c-format +msgid "" +"When argument 'label' is a list, the name of each element of 'label' not in " +"'by' must match the first element of the class of the element value. " +"Mismatches: %s" +msgstr "" +"Когда аргумент «label» является списком, имя каждого его элемента, не " +"входящее в «by», должно совпадать с первым элементом класса данного " +"элемента. Это не выполняется для: %s" + +#: groupingsets.R:110 +#, c-format +msgid "" +"Expression passed to grouping sets function must not update by reference. " +"Use ':=' on results of your grouping function." +msgstr "" +"Выражение, переданное в функцию группировки множеств, не должно изменять " +"таблицу данных по ссылке. Используйте ':=' на результатах функции " +"группировки." + +#: groupingsets.R:117 +#, c-format +msgid "" +"When using `id=TRUE` the 'j' expression must not evaluate to a column named " +"'grouping'." +msgstr "" +"При использовании `id=TRUE` выражение «j» не должно вычислять столбец с " +"именем «grouping»." + +#: groupingsets.R:119 +#, c-format +msgid "" +"There exists duplicated column names in the results, ensure the column " +"passed/evaluated in `j` and those in `by` are not overlapping." +msgstr "" +"В результатах вычислений дублируются имена столбцов. Убедитесь, что столбцы " +"в «j» и в «by» не пересекаются между собой." + +#: groupingsets.R:142 +#, c-format +msgid "%s (label: %s)" +msgstr "%s («label»: %s)" + +#: groupingsets.R:143 +#, c-format +msgid "" +"For the following variables, the 'label' value was already in the data: %s" +msgstr "Для следующих переменных значение «label» уже находилось в данных: %s" + +#: groupingsets.R:150 +#, c-format +msgid "" +"Using integer64 class columns require to have 'bit64' package installed." +msgstr "" +"Использование столбцов класса integer64 требует установки пакета «bit64»." + +#: last.R:39 last.R:80 +#, c-format +msgid "" +"'xts' class passed to %s function but 'xts' is not available, you should " +"have 'xts' installed already" +msgstr "" +"Объект класса «xts» передан в функцию %s, но пакет 'xts' недоступен. У вас " +"уже должен быть установлен пакет 'xts'" + +#: merge.R:4 +#, c-format +msgid "Argument 'sort' should be logical TRUE/FALSE" +msgstr "Аргумент «sort» должен быть TRUE или FALSE" + +#: merge.R:6 +#, c-format +msgid "Argument 'no.dups' should be logical TRUE/FALSE" +msgstr "Аргумент «no.dups» должен быть TRUE или FALSE" + +#: merge.R:18 +#, c-format +msgid "Neither of the input data.tables to join have columns." +msgstr "Ни в одной из входных data.table для соединения нет столбцов." + +#: merge.R:20 merge.R:22 +#, c-format +msgid "Input data.table '%s' has no columns." +msgstr "В data.table «%s» нет столбцов." + +#: merge.R:32 +#, c-format +msgid "`by.x` and `by.y` must be of same length." +msgstr "«by.x» и «by.y» должны быть одинаковой длины." + +#: merge.R:34 +#, c-format +msgid "Supplied both `by` and `by.x`/`by.y`. `by` argument will be ignored." +msgstr "Переданы и аргумент «by» и «by.x»/«by.y». Игнорирую «by»." + +#: merge.R:37 +#, c-format +msgid "A non-empty vector of column names is required for `by.x` and `by.y`." +msgstr "Для «by.x» и «by.y» необходим непустой вектор имен столбцов." + +#: merge.R:39 merge.R:42 merge.R:56 merge.R:59 +#, c-format +msgid "The following columns listed in `%s` are missing from %s: %s" +msgstr "Следующие столбцы, указанные в «%s», отсутствуют в «%s»: %s" + +#: merge.R:54 +#, c-format +msgid "A non-empty vector of column names for `by` is required." +msgstr "«by» должен быть непустым векторов имен столбцов." + +#: merge.R:68 +#, c-format +msgid "Unknown argument '%s' has been passed." +msgstr "Передан неизвестный аргумент «%s»." + +#: merge.R:71 +#, c-format +msgid "Passed %d unknown and unnamed arguments." +msgstr "Передано %d неизвестных и неименованных аргументов." + +#: merge.R:121 +#, c-format +msgid "column names %s are duplicated in the result" +msgstr "Имена столбцов %s дублируются в результате" + +#: onAttach.R:23 +#, c-format +msgid "" +"data.table %s IN DEVELOPMENT built %s%s using %d threads (see ?getDTthreads)." +msgstr "" +"data.table %s В РАЗРАБОТКЕ скомпилировано %s%s; использую %d потоков (см. ?" +"getDTthreads)." + +#: onAttach.R:25 +#, c-format +msgid "data.table %s using %d threads (see ?getDTthreads)." +msgstr "data.table %s; использую %d потоков (см. ?getDTthreads)." + +#: onAttach.R:26 +#, c-format +msgid "Latest news: r-datatable.com" +msgstr "Новости: r-datatable.com" + +#: onAttach.R:27 +msgid "TRANSLATION CHECK" +msgstr "ПРОВЕРКА ПЕРЕВОДА" + +#: onAttach.R:29 +#, c-format +msgid "" +"**********\n" +"Running data.table in English; package support is available in English only. " +"When searching for online help, be sure to also check for the English error " +"message. This can be obtained by looking at the po/R-.po and po/" +".po files in the package source, where the native language and " +"English error messages can be found side-by-side.%s\n" +"**********" +msgstr "" +"**********\n" +"Запуск data.table на русском языке; поддержка пакета доступна только на " +"английском языке. При поиске онлайн-справки не забудьте также проверить " +"сообщения об ошибке на английском языке. Это можно сделать, просмотрев файлы " +"po/R-ru.po и po/ru.po в исходном тексте пакета, где рядом находятся " +"сообщения об ошибках на русском и английском языках.%s\n" +"*********" + +#: onAttach.R:34 +#, c-format +msgid "" +"**********\n" +"This development version of data.table was built more than 4 weeks ago. " +"Please update: data.table::update_dev_pkg()\n" +"**********" +msgstr "" +"**********\n" +"Эта разрабатываемая версия data.table была собрана более 4 недель назад. " +"Пожалуйста, обновите: data.table::update_dev_pkg()\n" +"**********" + +#: onAttach.R:36 +#, c-format +msgid "" +"**********\n" +"This installation of data.table has not detected OpenMP support. It should " +"still work but in single-threaded mode." +msgstr "" +"**********\n" +"В этой установке data.table не обнаружена поддержка OpenMP. Она должна " +"работать, но в однопоточном режиме." + +#: onAttach.R:38 +#, c-format +msgid "" +"This is a Mac. Please read https://mac.r-project.org/openmp/. Please engage " +"with Apple and ask them for support. Check r-datatable.com for updates, and " +"our Mac instructions here: https://github.com/Rdatatable/data.table/wiki/" +"Installation. After several years of many reports of installation problems " +"on Mac, it's time to gingerly point out that there have been no similar " +"problems on Windows or Linux.\n" +"**********" +msgstr "" +"Работаю на Mac. Пожалуйста, прочитайте https://mac.r-project.org/openmp/. " +"Обратитесь в компанию Apple за поддержкой. Следите за обновлениями на r-" +"datatable.com, а также за нашими инструкциями для Mac здесь: https://github." +"com/Rdatatable/data.table/wiki/Installation. После нескольких лет " +"многочисленных сообщений о проблемах с установкой на Mac стоит осторожно " +"заметить, что на Windows или Linux подобных проблем не возникало.\n" +"**********" + +#: onAttach.R:40 +#, c-format +msgid "" +"This is %s. This warning should not normally occur on Windows or Linux where " +"OpenMP is turned on by data.table's configure script by passing -fopenmp to " +"the compiler. If you see this warning on Windows or Linux, please file a " +"GitHub issue.\n" +"**********" +msgstr "" +"Работаю на %s. Это предупреждение обычно не должно появляться на Windows или " +"Linux, где OpenMP включается скриптом configure пакета путем передачи -" +"fopenmp компилятору. Если вы видите это предупреждение на Windows или Linux, " +"пожалуйста, сообщите о проблеме на наш GitHub.\n" +"**********" + +#: onAttach.R:44 +#, c-format +msgid "" +"**********\n" +"This data.table installation was compiled for R < 3.4.0 (Apr 2017) and is " +"known to leak memory. Please upgrade R and reinstall data.table to fix the " +"leak. Maintaining and testing code branches to support very old versions " +"increases development time so please do upgrade R. We intend to bump data." +"table's dependency from 8 year old R 3.1.0 (Apr 2014) to 5 year old R 3.4.0 " +"(Apr 2017).\n" +"**********" +msgstr "" +"**********\n" +"Эта установка data.table была скомпилирована для R < 3.4.0 (апрель 2017), " +"где есть известные проблемы, связанные с утечкой памяти. Пожалуйста, " +"обновите R и переустановите data.table, чтобы устранить утечку. Поддержка и " +"тестирование ветвей кода для поддержки очень старых версий R затрудняет " +"разработку, поэтому, пожалуйста, обновите R. Мы намерены изменить " +"зависимость data.table с 8-летней версии R 3.1.0 (апрель 2014) на 5-летнюю R " +"3.4.0 (апрель 2017).\n" +"**********" + +#: onLoad.R:9 +#, c-format +msgid "" +"Option 'datatable.nomatch' is defined but is now ignored. Please see note 11 " +"in v1.12.4 NEWS (Oct 2019), and note 14 in v1.14.2." +msgstr "" +"Опция «datatable.nomatch» определена, но теперь ни на что не влияет. См. " +"примечание 11 в версии 1.12.4 NEWS (Oct 2019) и примечание 14 в версии " +"1.14.2." + +#: onLoad.R:28 +#, c-format +msgid "" +"The data_table.%s version (%s) does not match the package (%s). Please close " +"all R sessions to release the old %s and reinstall data.table in a fresh R " +"session. Prior to R version 3.6.0 patched, R's package installer could leave " +"a package in an apparently functional state where new R code was calling old " +"C code silently: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478. " +"Once a package is in this mismatch state it may produce wrong results " +"silently until you next upgrade the package. This mismatch between R and C " +"code can happen with any package not just data.table. It is just that data." +"table has added this check." +msgstr "" +"Версия data_table.%s (%s) не соответствует пакету (%s). Пожалуйста, закройте " +"все сеансы R, чтобы освободить старый %s, и переустановите data.table в " +"свежем сеансе R. До версии 3.6.0 с исправлениями программа установки пакетов " +"R могла оставить пакет в состоянии, которое выглядело нормальным, но при " +"этом новый код R молча вызывал старый код C: https://bugs.r-project.org/" +"bugzilla/show_bug.cgi?id=17478. Если пакет находится в таком состоянии " +"несоответствия, он может молча выдавать неверные результаты до следующего " +"обновления пакета. Такое несоответствие между кодом на R и C может произойти " +"с любым пакетом, не только с data.table, но мы проверяем такую ситуацию." + +#: onLoad.R:32 +#, c-format +msgid "" +"This is R %s but data.table has been installed using R %s. The major version " +"must match. Please reinstall data.table." +msgstr "" +"Это R %s, но data.table был установлен с помощью R %s. Старшие компоненты " +"версий должны совпадать. Пожалуйста, переустановите data.table." + +#: onLoad.R:108 +#, c-format +msgid "Unexpected base R behaviour: list(x) has copied x" +msgstr "Неожиданное поведение R: list(x) скопировал x" + +#: onLoad.R:116 +#, c-format +msgid "Unexpected base R behaviour: names<- has copied column contents" +msgstr "Неожиданное поведение R: `names<-` скопировал содержимое столбца" + +#: onLoad.R:126 +#, c-format +msgid "" +"Unexpected base R behaviour: DF[2,2]<- did not copy column 2 which was " +"assigned to" +msgstr "" +"Неожиданное поведение R: DF[2,2]<- не скопирован столбец 2, к которому было " +"выполнено присовение" + +#: onLoad.R:127 +#, c-format +msgid "" +"Unexpected base R behaviour: DF[2,2]<- copied the first column which was not " +"assigned to, too" +msgstr "" +"Неожиданное поведение R: DF[2,2]<- скопировал первый столбец, к которому " +"присвоения не было" + +#: onLoad.R:129 +#, c-format +msgid "Unexpected base R behaviour: DF[2,2]<- has not copied address(DF)" +msgstr "Неожиданное поведение R: DF[2,2]<- не скопировало address(DF)" + +#: openmp-utils.R:3 +#, c-format +msgid "Provide either threads= or percent= but not both" +msgstr "Укажите либо threads=, либо percent=, но не оба одновременно" + +#: openmp-utils.R:4 +#, c-format +msgid "percent= is provided but is length %d" +msgstr "передано percent=, но длины %d" + +#: openmp-utils.R:6 +#, c-format +msgid "percent==%d but should be a number between 2 and 100" +msgstr "percent==%d, но должно быть числом от 2 до 100" + +#: print.data.table.R:19 +#, c-format +msgid "Valid options for col.names are 'auto', 'top', and 'none'" +msgstr "Допустимые варианты для col.names: 'auto', 'top' и 'none'" + +#: print.data.table.R:21 +#, c-format +msgid "Valid options for trunc.cols are TRUE and FALSE" +msgstr "Допустимыми вариантами для «trunc.cols» являются TRUE и FALSE" + +#: print.data.table.R:23 +#, c-format +msgid "Column classes will be suppressed when col.names is 'none'" +msgstr "" +"Классы столбцов будут игнорированы, если col.names имеет значение 'none'" + +#: print.data.table.R:153 +#, c-format +msgid "" +"Internal structure doesn't seem to be a list. Possibly corrupt data.table." +msgstr "" +"Структура data.table не похожа на список. Возможно, повреждённый объект." + +#: programming.R:14 programming.R:40 +#, c-format +msgid "'x' must be a list" +msgstr "«x» должен быть списком" + +#: programming.R:22 +#, c-format +msgid "" +"Character objects provided in the input are not scalar objects, if you need " +"them as character vector rather than a name, then wrap each into 'I' call: %s" +msgstr "" +"Переданные строки не являются скалярами. Если они нужны как строковые " +"векторы, а не как имена, оберните их в вызов 'I': %s" + +#: programming.R:50 +#, c-format +msgid "'env' must not be missing" +msgstr "«env» должно быть указано" + +#: programming.R:56 +#, c-format +msgid "'env' must be a list or an environment" +msgstr "«env» должно быть списком или окружением" + +#: programming.R:63 +#, c-format +msgid "'env' argument does not have names" +msgstr "аргумент «env» не содержит имен" + +#: programming.R:65 +#, c-format +msgid "'env' argument has zero char names" +msgstr "аргумент «env» содержит пустые имена (из нуля символов)" + +#: programming.R:67 +#, c-format +msgid "'env' argument has NA names" +msgstr "аргумент «env» содержит имена-NA" + +#: programming.R:69 +#, c-format +msgid "'env' argument has duplicated names" +msgstr "в аргументе «env» имена дублируются" + +#: rowwiseDT.R:4 +#, c-format +msgid "" +"Must provide at least one column (use `name=`). See ?rowwiseDT for details" +msgstr "" +"Пожалуйста, передайте хотя бы один столбец (используйте имя=...). Подробнее " +"см. ?rowwiseDT" + +#: rowwiseDT.R:7 +#, c-format +msgid "Named arguments must be empty" +msgstr "Именованные аргументы должны быть пустыми" + +#: rowwiseDT.R:9 +#, c-format +msgid "Header must be the first N arguments" +msgstr "Заголовок должен состоять из первых N аргументов" + +#: rowwiseDT.R:15 +#, c-format +msgid "" +"There are %d columns but the number of cells is %d, which is not an integer " +"multiple of the columns" +msgstr "" +"Передано %d столбцов, но всего элементов %d, что не кратно количеству " +"столбцов" + +#: setkey.R:3 +#, c-format +msgid "" +"x may no longer be the character name of the data.table. The possibility was " +"undocumented and has been removed." +msgstr "" +"«x» больше не может быть строкой-именем объекта data.table. Эта возможность " +"была не была документирована, а сейчас удалена." + +#: setkey.R:34 +#, c-format +msgid "x is not a data.table" +msgstr "x не является data.table" + +#: setkey.R:35 +#, c-format +msgid "" +"cols is not a character vector. Please see further information in ?setkey." +msgstr "" +"«cols» не является вектором строк. Дополнительную информацию см. в ?setkey." + +#: setkey.R:36 +#, c-format +msgid "" +"Setting a physical key on .SD is reserved for possible future use; to modify " +"the original data's order by group. Try setindex() instead. Or, set*(copy(." +"SD)) as a (slow) last resort." +msgstr "" +"Установка физического ключа в .SD зарезервирована для возможного " +"использования в будущем (например, для изменения порядка исходных данных по " +"группам). Попробуйте вместо этого использовать setindex(). Либо попробуйте " +"set*(copy(.SD)), если больше ничего не помогает." + +#: setkey.R:38 +#, c-format +msgid "" +"cols is a character vector of zero length. Removed the key, but use NULL " +"instead, or wrap with suppressWarnings() to avoid this warning." +msgstr "" +"«cols» - вектор строк нулевой длины, удаляю ключ. Пожалуйста, передавайте " +"NULL или используйте suppressWarnings(), чтобы избежать этого предупреждения." + +#: setkey.R:42 +#, c-format +msgid "cols is the empty string. Use NULL to remove the key." +msgstr "«cols» - пустая строка. Чтобы удалить ключ, передайте NULL." + +#: setkey.R:43 setkey.R:267 +#, c-format +msgid "cols contains some blanks." +msgstr "«cols» содержит несколько пробелов." + +#: setkey.R:46 setkey.R:271 +#, c-format +msgid "some columns are not in the data.table: %s" +msgstr "некоторые столбцы отсутствуют в data.table: %s" + +#: setkey.R:54 setkey.R:272 +#, c-format +msgid "" +"x contains a column called '.xi'. Conflicts with internal use by data.table." +msgstr "" +"«x» содержит столбец с именем '.xi'. Оно необходимо для внутренних нужд data." +"table." + +#: setkey.R:57 +#, c-format +msgid "" +"Column '%s' is type '%s' which is not supported as a key column type, " +"currently." +msgstr "" +"Столбец «%s» имеет тип «%s», который в настоящее время не поддерживается в " +"качестве типа столбца-ключа." + +#: setkey.R:132 +#, c-format +msgid "x is vector but 'by' is supplied" +msgstr "«x» - вектор, но передан аргумент «by»" + +#: setkey.R:148 +#, c-format +msgid "x is a single vector, non-NULL 'by' doesn't make sense" +msgstr "«x» - одиночный вектор, передавать не-NULL «by» не имеет смысла" + +#: setkey.R:160 +#, c-format +msgid "" +"data.table has no support for sorting by method='%s'. Use base::order(), not " +"order(), if you really need this." +msgstr "" +"data.table не поддерживает сортировку с method='%s'. Если это правда нужно, " +"используйте base::order() вместо order()." + +#: setkey.R:181 +#, c-format +msgid "Attempting to order a 0-column data.table or data.frame." +msgstr "Попытка упорядочить объект из 0 столбцов." + +#: setkey.R:186 +#, c-format +msgid "" +"The first item passed to [f]order is a plain list but there are more items. " +"It should be a data.table or data.frame." +msgstr "" +"Первый элемент, переданный в [f]order, - это обычный список, но дальше " +"переданы и другие аргументы. Пожалуйста, передайте data.table или data.frame." + +#: setkey.R:194 +#, c-format +msgid "Mixing '-' with vector decreasing= is not supported." +msgstr "" +"Не поддерживается использование «-» совместно с векторным аргументом " +"«decreasing»." + +#: setkey.R:195 +#, c-format +msgid "decreasing= has length %d applied to sorting %d columns." +msgstr "«decreasing» длины %d, но отсортировать нужно %d столбцов." + +#: setkey.R:211 +#, c-format +msgid "Internal code should not be being called on type double" +msgstr "fsort(internal = TRUE) нельзя вызывать для типа double" + +#: setkey.R:219 +#, c-format +msgid "" +"Input is not a vector of type double. New parallel sort has only been done " +"for double vectors so far. Using one thread." +msgstr "" +"Входные данные не являются вектором типа double. Новая параллельная " +"сортировка до сих пор была реализована только для векторов типа double. " +"Использую один поток." + +#: setkey.R:220 +#, c-format +msgid "" +"New parallel sort has not been implemented for decreasing=TRUE so far. Using " +"one thread." +msgstr "" +"Новая параллельная сортировка пока не реализована для decreasing=TRUE. " +"Использую один поток." + +#: setkey.R:221 +#, c-format +msgid "" +"New parallel sort has not been implemented for vectors containing NA values " +"so far. Using one thread." +msgstr "" +"Новая параллельная сортировка пока не реализована для векторов, содержащих " +"значения NA. Использую один поток." + +#: setkey.R:233 setkey.R:259 +#, c-format +msgid "x must be a data.frame or data.table" +msgstr "«x» должен быть data.frame или data.table" + +#: setkey.R:261 +#, c-format +msgid "na.last must be logical TRUE/FALSE" +msgstr "«na.last» должен быть TRUE или FALSE" + +#: setkey.R:262 +#, c-format +msgid "" +"cols is not a character vector. Please see further information in ?setorder." +msgstr "" +"«cols» не является строковым вектором. Дополнительную информацию см. в ?" +"setorder." + +#: setkey.R:264 +#, c-format +msgid "" +"cols is a character vector of zero length. Use NULL instead, or wrap with " +"suppressWarnings() to avoid this warning." +msgstr "" +"cols - строковый вектор нулевой длины. Используйте вместо него NULL или " +"оберните с помощью suppressWarnings(), чтобы избежать этого предупреждения." + +#: setkey.R:275 +#, c-format +msgid "Column '%s' is type '%s' which is not supported for ordering currently." +msgstr "" +"Столбец '%s' имеет тип '%s', для которого в настоящее время не " +"поддерживается сортировка." + +#: setkey.R:319 +#, c-format +msgid "" +"'sorted' is TRUE but element %d is non-atomic, which can't be sorted; try " +"setting sorted = FALSE" +msgstr "" +"«sorted» = TRUE, но элемент %d - неатомарный, который невозможно " +"отсортировать; попробуйте установить sorted = FALSE" + +#: setkey.R:334 +#, c-format +msgid "" +"Cross product of elements provided to CJ() would result in %.0f rows which " +"exceeds .Machine$integer.max == %d" +msgstr "" +"Кросс-соединение аргументов, переданных в CJ(), приведет к получению %.0f " +"строк, что превышает .Machine$integer.max == %d" + +#: setops.R:3 setops.R:40 +#, c-format +msgid "x and y must both be data.tables" +msgstr "«x» и «y» должны быть оба data.table" + +#: setops.R:17 +#, c-format +msgid "" +"When x's column ('%s') is character, the corresponding column in y ('%s') " +"should be factor or character, but found incompatible type '%s'." +msgstr "" +"Когда столбец «x» ('%s') является вектором строк, соответствующий столбец в " +"«y» ('%s') должен быть фактором или строковым, но найден несовместимый тип " +"'%s'." + +#: setops.R:19 +#, c-format +msgid "" +"When x's column ('%s') is factor, the corresponding column in y ('%s') " +"should be character or factor, but found incompatible type '%s'." +msgstr "" +"Когда столбец «x» ('%s') является фактором, соответствующий столбец в " +"«y» ('%s') должен быть фактором или строковым, но найден несовместимый тип " +"'%s'." + +#: setops.R:21 +#, c-format +msgid "" +"When x's column ('%s') is integer or numeric, the corresponding column in y " +"('%s') can not be character or logical types, but found incompatible type " +"'%s'." +msgstr "" +"Когда столбец «x» ('%s') является численным, соответствующий столбец в " +"«y» ('%s') не должен быть логическим или строковым, но найден несовместимый " +"тип '%s'." + +#: setops.R:39 +#, c-format +msgid "argument 'all' should be logical of length one" +msgstr "аргумент «all» должен быть логическим скаляром" + +#: setops.R:41 +#, c-format +msgid "x and y must have the same column names" +msgstr "у «x» и «y» должны быть одинаковые имена столбцов" + +#: setops.R:42 +#, c-format +msgid "x and y must have the same column order" +msgstr "у «x» и «y» должен быть одинаковый порядок столбцов" + +#: setops.R:55 +#, c-format +msgid "Item %d of x is '%s' but the corresponding item of y is '%s'." +msgstr "" +"Элемент №%d в «x» - это '%s', но соответствующий элемент в «y» - это '%s'." + +#: setops.R:57 +#, c-format +msgid "None of the datasets should contain a column named '.seqn'" +msgstr "В наборах данныхне должно быть стобца с именем «.seqn»" + +#: setops.R:162 +msgid "Datasets have different keys" +msgstr "У таблиц различаются ключи сортировки" + +#: setops.R:163 setops.R:164 +#, c-format +msgid "has no key" +msgstr "ключ отсутствует" + +#: setops.R:173 +msgid "Datasets have different indices" +msgstr "У таблиц различаются индексы" + +#: setops.R:174 setops.R:175 +#, c-format +msgid "has no index" +msgstr "индекс отсутствует" + +#: setops.R:192 +#, c-format +msgid "None of the datasets to compare should contain a column named '.seqn'" +msgstr "В сравниваемых наборах данных не должно быть столбца с именем «.seqn»" + +#: setops.R:195 +#, c-format +msgid "" +"Datasets to compare with 'ignore.row.order' must not have unsupported column " +"types: %s" +msgstr "" +"В сравниваемых с опцией «ignore.row.order» наборах данных не должно быть " +"столбцов неподдерживаемых типов: %s" + +#: setops.R:197 +#, c-format +msgid "" +"Argument 'tolerance' was forced to lowest accepted value `sqrt(." +"Machine$double.eps)` from provided %s" +msgstr "" +"Увеличиваю аргумент «tolerance» с %s до наиболее строгого допустимого " +"значения `sqrt(.Machine$double.eps)`" + +#: setops.R:210 +#, c-format +msgid "" +"Duplicate rows in datasets, numeric columns and ignore.row.order cannot be " +"used with non 0 tolerance argument" +msgstr "" +"В наборах данных дублируются строки. Не могу использовать численные столбцы " +"и «ignore.row.order» одновременно с tolerance != 0" + +#: setops.R:224 +#, c-format +msgid "" +"Factor columns and ignore.row.order cannot be used with non 0 tolerance " +"argument" +msgstr "" +"Не могу использовать столбцы-факторы и «ignore.row.order» одновременно с " +"tolerance != 0" + +#: shift.R:3 +#, c-format +msgid "Provided argument fill=%s will be ignored since type='cyclic'." +msgstr "Игнорирую переданный аргумент fill=%s, так как type='cyclic'." + +#: tables.R:46 +#, c-format +msgid "order.col='%s' not a column name of info" +msgstr "order.col='%s' не является именем столбца «info»" + +#: test.data.table.R:17 +#, c-format +msgid "data.table package is loaded. Unload or start a fresh R session." +msgstr "Пакет data.table загружен. Выгрузите его или перезапустите R." + +#: test.data.table.R:33 +#, c-format +msgid "" +"script must end with '.Rraw'. If a file ending '.Rraw.bz2' exists, that will " +"be found and used." +msgstr "" +"имя скрипта должно заканчиваться на '.Rraw'. Если существует файл с " +"расширением '.Rraw.bz2', он также будет использован." + +#: test.data.table.R:63 +#, c-format +msgid "Neither %s nor %s exist in %s" +msgstr "Ни %s, ни %s не существуют в %s" + +#: test.data.table.R:118 +msgid "object '%s' not found" +msgstr "объект '%s' не найден" + +#: test.data.table.R:142 +#, c-format +msgid "" +"memtest intended for Linux. Step through data.table:::rss() to see what went " +"wrong." +msgstr "" +"«memtest» рассчитано на Linux. Запустите data.table:::rss() в отладчике и " +"посмотрите, что идёт не так." + +#: test.data.table.R:196 +#, c-format +msgid "Attempt to subset to %d tests matching '%s' failed, running full suite." +msgstr "" +"Не удалось выделить %d тестов, которые подходят под шаблон '%s', запускаю " +"весь набор." + +#: test.data.table.R:245 +#, c-format +msgid "Failed in %s after test %s before the next test() call in %s" +msgstr "Сбой в %s после теста %s перед следующим вызовом test() в %s" + +#: test.data.table.R:268 +#, c-format +msgid "Timings count mismatch: %d vs %d" +msgstr "Несоответствие количества измеренных промежутков времени: %d против %d" + +#: test.data.table.R:400 +#, c-format +msgid "" +"Test %s is invalid: when error= is provided it does not make sense to pass y " +"as well" +msgstr "" +"Тест %s некорректен: если указано error=, не имеет смысла передавать также y=" + +#: timetaken.R:3 +#, c-format +msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" +msgstr "" +"Используйте started.at=proc.time(), а не Sys.time() (что возвращает POSIXt и " +"гораздо медленнее)" + +#: transpose.R:7 +#, c-format +msgid "make.names='%s' not found in names of input" +msgstr "make.names='%s' не найдено среди имён входных данных" + +#: transpose.R:12 +#, c-format +msgid "make.names=%d is out of range [1,ncol=%d]" +msgstr "make.names=%d выходит за пределы диапазона [1,ncol=%d]" + +#: transpose.R:28 +#, c-format +msgid "'names' must be TRUE/FALSE or a character vector." +msgstr "«names» должно быть TRUE, FALSE или строковым вектором." + +#: transpose.R:34 +#, c-format +msgid "'keep' should contain integer values between %d and %d." +msgstr "«keep» должен содержать целочисленные значения от %d до %d." + +#: transpose.R:51 +#, c-format +msgid "The argument 'type.convert' does not support empty list." +msgstr "Аргумент 'type.convert' не поддерживает пустой список." + +#: transpose.R:57 +#, c-format +msgid "" +"When the argument 'type.convert' contains an unnamed element, it is expected " +"to be the last element and should be a function. More than one unnamed " +"element is not allowed unless all elements are functions with length equal " +"to %d (the length of the transpose list or 'keep' argument if it is " +"specified)." +msgstr "" +"Если аргумент «type.convert» содержит неименованный элемент, он должен быть " +"последним и должен быть функцией. Более одного неименованного элемента не " +"допускается, кроме случая, когда все элементы являются функциями, а длина " +"аргумента равна %d (длина списка для транспонирования или «keep»)." + +#: transpose.R:66 +#, c-format +msgid "" +"When the argument 'type.convert' contains transpose list indices, it should " +"be a named list of non-missing integer values (with no duplicate) except the " +"last element that should be unnamed if it is a function." +msgstr "" +"Когда аргумент 'type.convert' содержит индексы списка транспонирования, он " +"должен быть именованным списком из целых не дублирующихся не-NA значений, за " +"исключением последнего элемента, который должен быть неименованным, если это " +"функция." + +#: transpose.R:68 +#, c-format +msgid "" +"When the argument 'type.convert' contains transpose list indices, they " +"should be integer values contained in the argument 'keep' (if it is " +"specified) or be between %d and %d (if it is not). But '%s' is/are not " +"contained in '%s'." +msgstr "" +"Когда аргумент 'type.convert' содержит индексы списка транспонирования, они " +"должны быть целыми значениями, содержащимися в аргументе «keep» (если он " +"указан), или находиться между %d и %d (если он не указан). Но '%s' не " +"содержится в '%s'." + +#: transpose.R:74 +#, c-format +msgid "" +"In the argument 'type.convert', '%s' was ignored because all elements in the " +"transpose list or elements corresponding to indices specified in the 'keep' " +"argument have already been converted." +msgstr "" +"Игнорирую '%s' из аргумента «type.convert», так как все элементы в списке " +"транспонирования (или элементы, соответствующие индексам, указанным в " +"аргументе 'keep') уже были преобразованы." + +#: transpose.R:83 +#, c-format +msgid "" +"The argument 'type.convert' should be TRUE/FALSE, a function, a list of " +"functions, or a named list of pairs 'fun=indices' with optionally one " +"unnamed element (a function) but an object of type '%s' was provided." +msgstr "" +"Аргумент 'type.convert' должен быть TRUE/FALSE, функцией, списком функций " +"или именованным списком пар 'fun=indices', который может заканчиваться одной " +"неименованной функцией, но был предоставлен объект типа '%s'." + +#: transpose.R:88 +#, c-format +msgid "length(names) (= %d) is not equal to length(%s) (= %d)." +msgstr "length(names) (= %d) не равна length(%s) (= %d)." + +#: uniqlist.R:11 +#, c-format +msgid "l not type list" +msgstr "«l» не является списком" + +#: utils.R:18 +#, c-format +msgid "Argument 'nan' must be length 1" +msgstr "Аргумент «nan» должен быть длины 1" + +#: utils.R:21 +#, c-format +msgid "Argument 'nan' must be NA or NaN" +msgstr "Аргумент 'nan' должен быть NA либо NaN" + +#: utils.R:25 +msgid "Internal error in" +msgstr "Внутренняя ошибка в" + +#: utils.R:28 +msgid "Please report to the data.table issues tracker." +msgstr "Пожалуйста, сообщите об этом в систему отслеживания ошибок data.table." + +#: utils.R:72 utils.R:81 +#, c-format +msgid "x not boolean" +msgstr "x не является логическим" + +#: utils.R:92 +#, c-format +msgid "" +"Some columns are type 'integer64' but package bit64 is not installed. Those " +"columns will print as strange looking floating point data. There is no need " +"to reload the data. Simply install.packages('bit64') to obtain the integer64 " +"print method and print the data again." +msgstr "" +"Некоторые столбцы имеют тип 'integer64', но пакет bit64 не установлен. На " +"печати они будут выглядеть как странные числа с плавающей запятой. Не " +"загружайте данные заново. Выполните install.packages('bit64') и загрузите " +"пакет, чтобы появился метод печати для класса integer64, и напечатайте " +"данные снова." + +#: xts.R:4 +#, c-format +msgid "keep.rownames must be length 1" +msgstr "keep.rownames должно быть длины 1" + +#: xts.R:5 +#, c-format +msgid "keep.rownames must not be NA" +msgstr "keep.rownames не должно быть NA" + +#: xts.R:11 +#, c-format +msgid "" +"Input xts object should not have '%s' column because it would result in " +"duplicate column names. Rename '%s' column in xts or use `keep.rownames` to " +"change the index column name." +msgstr "" +"Во входном объекте xts не должно быть столбца '%s', поскольку в таком случае " +"имена столбцов будут дублироваться. Пожалуйста, переименуйте столбец '%s' в " +"объекте xts, либо используйте `keep.rownames`, чтобы изменить имя индексного " +"столбца." + +#: xts.R:21 +#, c-format +msgid "" +"data.table must have a time based column in first position, use " +"`setcolorder` function to change the order, or see ?timeBased for supported " +"types" +msgstr "" +"в этой data.table первый столбец должен быть временны́м; чтобы переставить " +"столбцы, используйте `setcolorder`, либо см. ?timeBased, чтобы узнать, какие " +"типы считаются временны́ми" + +#: xts.R:25 +#, c-format +msgid "Following columns are not numeric and will be omitted: %s" +msgstr "Следующие столбцы не являются числовыми и будут пропущены: %s" + +#: bmerge.R:214 +msgid " Found %d non-equi group ...\n" +msgid_plural " Found %d non-equi groups ...\n" +msgstr[0] " Найдена %d группа соединения по неравенству ...\n" +msgstr[1] " Найдены %d группы соединения по неравенству ...\n" +msgstr[2] " Найдено %d групп соединения по неравенству ...\n" + +#: data.table.R:712 +msgid "column not removed because not found: %s" +msgid_plural "columns not removed because not found: %s" +msgstr[0] "столбец(ы) не удален(ы), потому что не найден(ы): %s" +msgstr[1] "столбец(ы) не удален(ы), потому что не найден(ы): %s" +msgstr[2] "столбец(ы) не удален(ы), потому что не найден(ы): %s" + +#: data.table.R:727 +msgid "column not found: %s" +msgid_plural "columns not found: %s" +msgstr[0] "столбец(ы) не найден(ы): %s" +msgstr[1] "столбец(ы) не найден(ы): %s" +msgstr[2] "столбец(ы) не найден(ы): %s" + +#: data.table.R:895 +msgid "The item in the 'by' or 'keyby' list is length %s." +msgid_plural "The items in the 'by' or 'keyby' list have lengths %s." +msgstr[0] "Элементы списков «by» или «keyby» имеют длины %s." +msgstr[1] "Элементы списков «by» или «keyby» имеют длины %s." +msgstr[2] "Элементы списков «by» или «keyby» имеют длины %s." + +#: fmelt.R:27 +msgid "Pattern not found: [%s]" +msgid_plural "Patterns not found: [%s]" +msgstr[0] "Шаблон(ы) не найдены: [%s]" +msgstr[1] "Шаблон(ы) не найдены: [%s]" +msgstr[2] "Шаблон(ы) не найдены: [%s]" + +#: fread.R:340 +msgid "stringsAsFactors=%s converted %d column: %s\n" +msgid_plural "stringsAsFactors=%s converted %d columns: %s\n" +msgstr[0] "stringsAsFactors=%s, %d столбец переведён: %s\n" +msgstr[1] "stringsAsFactors=%s, %d столбца переведено: %s\n" +msgstr[2] "stringsAsFactors=%s, %d столбцов переведено: %s\n" + +#: print.data.table.R:50 +msgid "Index: %s\n" +msgid_plural "Indices: %s\n" +msgstr[0] "Индекс(ы): %s\n" +msgstr[1] "Индексы: %s\n" +msgstr[2] "Индексы: %s\n" + +#: print.data.table.R:285 +msgid "%d variable not shown: %s\n" +msgid_plural "%d variables not shown: %s\n" +msgstr[0] "%d переменная не показана: %s\n" +msgstr[1] "%d переменные не показаны: %s\n" +msgstr[2] "%d переменных не показано: %s\n" + +#: setops.R:46 +#, fuzzy +#| msgid "unsupported column type(s) found in x or y: %s" +msgid "unsupported column type found in x or y: %s" +msgid_plural "unsupported column types found in x or y: %s" +msgstr[0] "В «x» или «y» нашлись столбцы неподдерживаемых типов: %s" +msgstr[1] "В «x» или «y» нашлись столбцы неподдерживаемых типов: %s" +msgstr[2] "В «x» или «y» нашлись столбцы неподдерживаемых типов: %s" + +#: test.data.table.R:255 +msgid "%d error out of %d. Search %s for test number %s. Duration: %s." +msgid_plural "" +"%d errors out of %d. Search %s for test numbers %s. Duration: %s." +msgstr[0] "%d ошибка из %d. Ищите в %s тесты №№%s. Продолжительность: %s." +msgstr[1] "%d ошибки из %d. Ищите в %s тесты №№%s. Продолжительность: %s." +msgstr[2] "%d ошибок из %d. Ищите в %s тесты №№%s. Продолжительность: %s." + +#: utils.R:36 +#, fuzzy +#| msgid "" +#| "%s has some duplicated column name(s): %s. Please remove or rename the " +#| "duplicate(s) and try again." +msgid "" +"%s has duplicated column name %s. Please remove or rename the duplicate and " +"try again." +msgid_plural "" +"%s has duplicated column names %s. Please remove or rename the duplicates " +"and try again." +msgstr[0] "" +"В %s есть несколько дублированных имен столбцов: %s. Пожалуйста, удалите или " +"переименуйте дубликаты и повторите попытку." +msgstr[1] "" +"В %s есть несколько дублированных имен столбцов: %s. Пожалуйста, удалите или " +"переименуйте дубликаты и повторите попытку." +msgstr[2] "" +"В %s есть несколько дублированных имен столбцов: %s. Пожалуйста, удалите или " +"переименуйте дубликаты и повторите попытку." + +#, c-format +#~ msgid "" +#~ "with=FALSE ignored, it isn't needed when using :=. See ?':=' for examples." +#~ msgstr "" +#~ "Игнорирую «with=FALSE», он не нужен при использовании :=. Примеры " +#~ "смотрите в ?':='." + +#, c-format +#~ msgid "" +#~ "x has some duplicated column name(s): %s. Please remove or rename the " +#~ "duplicate(s) and try again." +#~ msgstr "" +#~ "Некоторые имена столбцов x дублированы: %s. Пожалуйста, удалите или " +#~ "переименуйте дубликаты и повторите попытку." + +#, c-format +#~ msgid "" +#~ "The %1$s generic in data.table has been passed a %2$s and will attempt to " +#~ "redirect to the relevant reshape2 method; please note that reshape2 is " +#~ "superseded and is no longer actively developed, and this redirection is " +#~ "now deprecated. Please do this redirection yourself like reshape2::" +#~ "%1$s(%3$s). In the next version, this warning will become an error." +#~ msgstr "" +#~ "Общей функции %1$s в data.table было передано значение %2$s, и она " +#~ "попытается передать его соответствующему методу из reshape2; обратите " +#~ "внимание, что reshape2 перестали разрабатывать, и это перенаправление " +#~ "теперь устарело. Пожалуйста, больше на него не полагайтесь и вызывайте " +#~ "reshape2::%1$s(%3$s) самостоятельно. В следующей версии это " +#~ "предупреждение превратится в ошибку." + +#, c-format +#~ msgid "number of %s =%d must be same as %s =%d" +#~ msgstr "количество %s (=%d) должно совпадать с количеством %s (=%d)" + +#, c-format +#~ msgid "dateTimeAs must be a single string" +#~ msgstr "«dateTimeAs» должен быть одной строкой" + +#, c-format +#~ msgid "dateTimeAs must be 'ISO','squash','epoch' or 'write.csv'" +#~ msgstr "«dateTimeAs» должно быть 'ISO', 'squash', 'epoch' или 'write.csv'" + +#, c-format +#~ msgid "" +#~ "logicalAsInt has been renamed logical01 for consistency with fread. It " +#~ "works fine for now but please change to logical01 at your convenience so " +#~ "we can remove logicalAsInt in future." +#~ msgstr "" +#~ "«logicalAsInt» теперь называется «logical01» для консистентности с " +#~ "fread(). Пока что старое название аргумента будет работать, но, " +#~ "пожалуйста, переходите на «logical01» в удобное для Вас время, чтобы мы " +#~ "могли удалить «logicalAsInt» в будущем." + +#, c-format +#~ msgid "Elements listed in `by.x` must be valid column names in x." +#~ msgstr "" +#~ "Элементы, перечисленные в «by.x», должны быть именами столбцов из «x»." + +#, c-format +#~ msgid "Elements listed in `by.y` must be valid column names in y." +#~ msgstr "Элементы «by.y» должны быть именами столбцов из «y»." + +#, c-format +#~ msgid "Elements listed in `by` must be valid column names in x and y" +#~ msgstr "В «by» должны быть имена столбцов из «x» и «y»" + +#, c-format +#~ msgid "" +#~ "key(x)<-value is deprecated and not supported. Please change to use " +#~ "setkey() with perhaps copy(). Has been warning since 2012." +#~ msgstr "" +#~ "Форма key(x)<-value устарела и не поддерживается. Пожалуйста, перейдите " +#~ "на использование setkey() и, может быть, copy(). Предупреждение выдается " +#~ "с 2012 года." + +#, c-format +#~ msgid "length(by.x) != length(by.y)" +#~ msgstr "length(by.x) != length(by.y)" + +#, c-format +#~ msgid "" +#~ "Internal error -- difftime objects may not be added to IDate, but Ops " +#~ "dispatch should have intervened to prevent this" +#~ msgstr "" +#~ "Внутренняя ошибка: объекты difftime не могут быть добавлены в IDate, но " +#~ "диспетчерская служба должна была вмешаться, чтобы предотвратить это" + +#, c-format +#~ msgid "Internal error: storage mode of IDate is somehow no longer integer" +#~ msgstr "" +#~ "Внутренняя ошибка: режим хранения IDate почему-то больше не является " +#~ "целочисленным" + +#, c-format +#~ msgid "" +#~ "Internal error -- difftime objects may not be subtracted from IDate, but " +#~ "Ops dispatch should have intervened to prevent this" +#~ msgstr "" +#~ "Внутренняя ошибка: объекты difftime не могут быть вычтены из IDate, но " +#~ "диспетчерская служба должна была вмешаться, чтобы предотвратить это" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000000..adf7caf572 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,4677 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.15.99\n" +"POT-Creation-Date: 2025-01-29 23:31-0800\n" +"PO-Revision-Date: 2025-01-31 13:59+0300\n" +"Last-Translator: Ivan Krylov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Poedit 3.2.2\n" + +#: assign.c:122 +msgid "" +"The data.table internal attributes of this table are invalid. This is " +"expected and normal for a data.table loaded from disk. Please remember to " +"always setDT() immediately after loading to prevent unexpected behavior. If " +"this table was not loaded from disk or you've already run setDT(), please " +"report to the data.table issue tracker.\n" +msgstr "" +"Некорректные внутренние атрибуты данной data.table. Это ожидаемо и нормально " +"для таблиц, загруженных с диска. Пожалуйста, не забывайте всегда запускать " +"setDT() сразу после загрузки, чтобы избежать неожиданного поведения. Если " +"эта таблица не была загружена с диска или вы уже выполнили setDT(), сообщите " +"об этом в трекере проблем data.table.\n" + +#: assign.c:203 +#, c-format +msgid "" +"Some columns are a multi-column type (such as a matrix column), for example " +"column %d. setDT will retain these columns as-is but subsequent operations " +"like grouping and joining may fail. Please consider as.data.table() instead " +"which will create a new column for each embedded column." +msgstr "" +"Некоторые столбцы имеют многоколоночный тип (например, матричный столбец), " +"например столбец %d. setDT сохранит эти столбцы как есть, но последующие " +"операции, такие как группировка и объединение, могут оказаться неудачными. " +"Вместо этого используйте as.data.table(), которая создаст новый столбец для " +"каждого встроенного столбца." + +#: assign.c:220 +#, c-format +msgid "" +"Column %d has class 'POSIXlt'. Please convert it to POSIXct (using as." +"POSIXct) and run setDT() again. We do not recommend the use of POSIXlt at " +"all because it uses 40 bytes to store one date." +msgstr "" +"Столбец №%d имеет класс 'POSIXlt'. Пожалуйста, преобразуйте его в POSIXct (с " +"помощью as.POSIXct) и запустите setDT() снова. Мы не рекомендуем " +"использовать POSIXlt вообще, так как для хранения одной даты в нем " +"используется 40 байт." + +#: assign.c:240 +#, c-format +msgid "" +"All elements in argument 'x' to 'setDT' must be of equal length, but input " +"%d has length %d whereas the first non-empty input had length %d" +msgstr "" +"Все элементы в аргументе 'x' для 'setDT' должны быть одинаковой длины, но " +"входной аргумент %d имеет длину %d, в то время как первый непустой входной " +"аргумент имеет длину %d" + +#: assign.c:250 +msgid "alloccol has been passed a NULL dt" +msgstr "alloccol() был передан dt = NULL" + +#: assign.c:251 +msgid "dt passed to alloccol isn't type VECSXP" +msgstr "dt, переданный в alloccol, не имеет типа VECSXP" + +#: assign.c:253 +msgid "" +"dt passed to alloccol has no class attribute. Please report result of " +"traceback() to data.table issue tracker." +msgstr "" +"dt, переданный в alloccol, не имеет атрибута class. Пожалуйста, сообщите о " +"результате traceback() в службу отслеживания ошибок data.table." + +#: assign.c:270 +#, c-format +msgid "" +"tl (%d) is greater than 10,000 items over-allocated (l = %d). If you didn't " +"set the datatable.alloccol option to be very large, please report to data." +"table issue tracker including the result of sessionInfo()." +msgstr "" +"В результате избыточного выделения памяти tl (%d) превышает l (%d) более чем " +"на 10 000 элементов. Если вы не задали параметр datatable.alloccol очень " +"большим, сообщите об этом в трекере проблем data.table, включая результат " +"выполнения sessionInfo()." + +#: assign.c:272 +#, c-format +msgid "" +"Attempt to reduce allocation from %d to %d ignored. Can only increase " +"allocation via shallow copy. Please do not use DT[...]<- or DT$someCol<-. " +"Use := inside DT[...] instead." +msgstr "" +"Попытка уменьшить выделение памяти с %d элементов до %d игнорируется. Можно " +"только увеличить буфер путем поверхностного копирования. Пожалуйста, не " +"используйте DT[...]<- или DT$someCol<-. Вместо этого используйте := внутри " +"DT[...]." + +#: assign.c:280 +msgid "" +"Has getOption('datatable.alloccol') somehow become unset? It should be a " +"number, by default 1024." +msgstr "" +"Параметр getOption('datatable.alloccol') каким-то образом был отключен? Это " +"должно быть число, по умолчанию 1024." + +#: assign.c:282 +#, c-format +msgid "" +"getOption('datatable.alloccol') should be a number, by default 1024. But its " +"type is '%s'." +msgstr "" +"getOption('datatable.alloccol') должно быть числом, по умолчанию 1024. Но " +"его тип - '%s'." + +#: assign.c:284 +#, c-format +msgid "" +"getOption('datatable.alloc') is a numeric vector ok but its length is %d. " +"Its length should be 1." +msgstr "" +"getOption('datatable.alloc') - это числовой вектор, но его длина равна %d. " +"Его длина должна быть равна 1." + +#: assign.c:287 +#, c-format +msgid "getOption('datatable.alloc')==%d. It must be >=0 and not NA." +msgstr "getOption('datatable.alloc')==%d.Оно должно быть >=0, а не NA." + +#: assign.c:293 between.c:22 between.c:28 frollR.c:41 frollR.c:95 fsort.c:119 +#: gsumm.c:351 gsumm.c:587 gsumm.c:733 gsumm.c:870 gsumm.c:1025 gsumm.c:1117 +#: nafill.c:108 openmp-utils.c:79 uniqlist.c:354 utils.c:117 utils.c:119 +#, c-format +msgid "%s must be TRUE or FALSE" +msgstr "%s должно быть TRUE или FALSE" + +#: assign.c:341 +msgid "assign has been passed a NULL dt" +msgstr "в assign() передано NULL значение dt" + +#: assign.c:342 +msgid "dt passed to assign isn't type VECSXP" +msgstr "dt, переданный функции assign, не имеет типа VECSXP" + +#: assign.c:344 +msgid "" +".SD is locked. Updating .SD by reference using := or set are reserved for " +"future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, " +"until shallow() is exported." +msgstr "" +".SD заблокирован. Обновление .SD по ссылке с помощью := или set " +"зарезервировано для будущего использования. Используйте := в j напрямую. Или " +"используйте copy(.SD) в качестве (медленного) последнего средства, пока " +"shallow() не будет экспортирован." + +#: assign.c:356 +msgid "dt passed to assign has no names" +msgstr "dt, переданный функции assign, не имеет имен" + +#: assign.c:360 +msgid "" +"data.table is NULL; malformed. A null data.table should be an empty list. " +"typeof() should always return 'list' for data.table." +msgstr "" +"data.table является NULL, что недопустимо. Пустая таблица data.table должна " +"быть пустым списком. typeof() всегда должна возвращать 'list' для объектов " +"data.table." + +#: assign.c:370 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "Назначение всех %d строк\n" + +#: assign.c:375 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" +"Принудительное преобразование i из числового в целое. Для повышения " +"эффективности передавайте целое число; например, 2L, а не 2" + +#: assign.c:378 +#, c-format +msgid "" +"i is type '%s'. Must be integer, or numeric is coerced with warning. If i is " +"a logical subset, simply wrap with which(), and take the which() outside the " +"loop if possible for efficiency." +msgstr "" +"i имеет тип '%s'. Должно быть целым или действительным числом, иначе будет " +"преобразовано с предупреждением. Если i является логическим подмножеством, " +"просто оберните его с помощью which(), а для эффективности вынесите which() " +"за пределы цикла, если это возможно." + +#: assign.c:384 subset.c:170 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]" +msgstr "i[%d] = %d, что находится за пределами диапазона [1,nrow=%d]" + +#: assign.c:387 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "Присвоение %d подмножеству строк%d\n" + +#: assign.c:403 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "length(LHS)==0; нет столбцов для удаления или присвоения RHS." + +#: assign.c:417 +msgid "" +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that. data.table's are over-allocated and don't " +"shallow copy." +msgstr "" +"set() в data.frame предназначен для изменения существующих столбцов, а не " +"для добавления новых. Для этого используйте класс data.table. Его объекты " +"используют избыточное выделение памяти и могут быть изменены по ссылке." + +#: assign.c:428 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" +"Принудительное преобразование j из числового в целое. Для повышения " +"эффективности передавайте целое число; например, 2L, а не 2" + +#: assign.c:431 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" +"j имеет тип '%s'. Должно быть целым; строковые и действительные значения " +"будут преобразованы с выдачей предупреждения." + +#: assign.c:433 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "" +"Невозможно дважды назначить один и тот же столбец в одном и том же запросе " +"(обнаружены дубликаты)." + +#: assign.c:434 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "newcolnames указан, но не является вектором строк" + +#: assign.c:436 +msgid "" +"Values of type POSIXlt detected and converted to POSIXct. We do not " +"recommend the use of POSIXlt at all because it typically takes more than 6 " +"times the storage as an equivalent POSIXct column. Use as.POSIXct() to avoid " +"this warning." +msgstr "" +"Обнаружены значения типа POSIXlt и преобразованы в POSIXct. Пожалуйста, не " +"используйте POSIXlt с data.table, поскольку он занимает в 6 раз больше " +"места, чем эквивалентный столбец типа POSIXct. Чтобы избежать этого " +"предупреждения, используйте as.POSIXct()." + +#: assign.c:446 +#, c-format +msgid "" +"RHS_list_of_columns revised to true because RHS list has 1 item which is " +"NULL, or whose length %d is either 1 or targetlen (%d). Please unwrap RHS.\n" +msgstr "" +"RHS_list_of_columns пересмотрен на true, потому что в списке правой части " +"присваивания есть 1 элемент, который либо является NULL, либо длина которого " +"%d равна 1 или targetlen (%d). Пожалуйста, разверните правую сторону " +"присваивания.\n" + +#: assign.c:451 +#, c-format +msgid "" +"Supplied %d columns to be assigned an empty list (which may be an empty data." +"table or data.frame since they are lists too). To delete multiple columns " +"use NULL instead. To add multiple empty list columns, use list(list())." +msgstr "" +"%d переданным столбцам присваивается пустой список (который может быть " +"пустой data.table или data.frame, поскольку они тоже являются списками). " +"Чтобы удалить несколько столбцов, используйте вместо этого значение NULL. " +"Чтобы добавить несколько пустых списочных столбцов, используйте list(list())." + +#: assign.c:456 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" +msgstr "" +"Переработка одного элемента списка RHS в %d столбцов. Пожалуйста, расширьте " +"RHS.\n" + +#: assign.c:458 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "" +"Для присвоения %d столбцам предоставлено %d элементов. Пожалуйста, смотрите " +"историю изменений для версии 1.12.2." + +#: assign.c:466 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. " +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that." +msgstr "" +"Среди номеров столбцов в j элемент №%d равен %d, что вне допустимого " +"диапазона номеров столбцов, [1, %d]. set() для объектов data.frame только " +"изменяет существующие столбцы, но не добавляет новые. Чтобы добавлять новые " +"столбцы через set(), используйте data.table." + +#: assign.c:467 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use " +"column names instead in j to add new columns." +msgstr "" +"Среди номеров столбцов в 'j' элемент №%d равен %d, что вне диапазона номеров " +"столбцов, [1, %d]. Чтобы добавлять новые столбцы, передайте в 'j' их имена, " +"а не номера." + +#: assign.c:473 +msgid "" +"Doubly-invalid attempt to delete a non-existent column while also providing i" +msgstr "" +"Попытка удалить несуществующий столбец (при заданном 'i', что само по себе " +"ошибка)" + +#: assign.c:475 +msgid "" +"Invalid attempt to delete a list column while also providing i; did you " +"intend to add NULL to those rows instead? If so, use list_col := " +"list(list(NULL))." +msgstr "" +"Нельзя удалить столбец-список, если задан 'i'; возможно, Вы хотели добавить " +"NULL к его строкам? Тогда используйте столбец_список := list(list(NULL))." + +#: assign.c:476 +msgid "When deleting columns, i should not be provided" +msgstr "При удалении столбцов нельзя указывать строки" + +#: assign.c:484 +#, c-format +msgid "" +"RHS of assignment to existing column '%s' is zero length but not NULL. If " +"you intend to delete the column use NULL. Otherwise, the RHS must have " +"length > 0; e.g., NA_integer_. If you are trying to change the column type " +"to be an empty list column then, as with all column type changes, provide a " +"full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the " +"new column." +msgstr "" +"Правая часть присвоения существующему столбцу «%s» имеет нулевую длину, но " +"не NULL. Если вы собираетесь удалить столбец, используйте NULL. В противном " +"случае длина правой части должна быть > 0; например, NA_integer_. Если вы " +"пытаетесь изменить тип столбца на пустой столбец-список, то, как и при всех " +"изменениях типов столбцов, укажите в правой части полноразмерный вектор, " +"например, vector('list',nrow(DT)), чтобы напрямую подменить старый столбец " +"новым." + +#: assign.c:491 +#, c-format +msgid "" +"Tried to assign NULL to column '%s', but this column does not exist to remove" +msgstr "" +"Попытка присвоить NULL столбцу «%s», но этот столбец не существует и поэтому " +"не может быть удалён" + +#: assign.c:499 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "" +"%d-столбцовая матрица в правой части := будет обработана как один вектор" + +#: assign.c:504 +#, c-format +msgid "" +"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " +"character, factor, integer or numeric)" +msgstr "" +"Невозможно присвоить столбцу «%s» (тип «фактор») значение типа «%s» (не " +"символьное, множительное, целое или числовое)" + +#: assign.c:510 +#, c-format +msgid "" +"Supplied %d items to be assigned to %d items of column '%s'. If you wish to " +"'recycle' the RHS please use rep() to make this intent clear to readers of " +"your code." +msgstr "" +"Предоставленные %d элементов должны быть присвоены %d элементам столбца " +"'%s'. Если вы хотите «многократно использовать» правую часть, используйте " +"rep(), чтобы дать понять это читателям вашего кода." + +#: assign.c:520 +msgid "" +"This data.table has either been loaded from disk (e.g. using readRDS()/" +"load()) or constructed manually (e.g. using structure()). Please run setDT() " +"or setalloccol() on it first (to pre-allocate space for new columns) before " +"assigning by reference to it." +msgstr "" +"Эта таблица data.table была либо загружена с диска (например, с помощью " +"readRDS()/load()), либо создана вручную (например, с помощью structure()). " +"Прежде чем изменять её содержимое по ссылке, сначала выполните setDT() или " +"setalloccol() (для предварительного выделения места под новые столбцы)." + +#: assign.c:523 +#, c-format +msgid "" +"truelength (%d) is greater than 10,000 items over-allocated (length = %d). " +"See ?truelength. If you didn't set the datatable.alloccol option very large, " +"please report to data.table issue tracker including the result of " +"sessionInfo()." +msgstr "" +"truelength (%d) превышает длину вектора (%d) более чем на 10 000. См. " +"раздел ?truelength. Если вы не задали параметр datatable.alloccol очень " +"большим, сообщите об этом в трекере проблем data.table, включая результат " +"работы функции sessionInfo()." + +#: assign.c:527 +msgid "" +"It appears that at some earlier point, names of this data.table have been " +"reassigned. Please ensure to use setnames() rather than names<- or " +"colnames<-. Otherwise, please report to data.table issue tracker." +msgstr "" +"Похоже, что в какой-то момент времени имена этой таблицы data.table были " +"переназначены. Пожалуйста, убедитесь, что вы используете setnames(), а не " +"names<- или colnames<-. В противном случае, пожалуйста, сообщите об этом в " +"трекере проблем data.table." + +#: assign.c:534 +msgid "" +"It appears that at some earlier point, attributes of this data.table have " +"been reassigned. Please use setattr(DT, name, value) rather than attr(DT, " +"name) <- value. If that doesn't apply to you, please report your case to the " +"data.table issue tracker." +msgstr "" +"Похоже, что в какой-то момент времени атрибуты этой data.table были " +"изменены. Пожалуйста, используйте setattr(DT, имя, значение), а не attr(DT, " +"имя) <- значение. Если Вы такого не делали, пожалуйста, сообщите об этом в " +"трекере проблем data.table." + +#: assign.c:564 +#, c-format +msgid "" +"RHS for item %d has been duplicated because MAYBE_REFERENCED==%d " +"MAYBE_SHARED==%d, but then is being plonked. length(values)==%d; " +"length(cols)==%d)\n" +msgstr "" +"В правой части элемент №%d был скопирован, поскольку MAYBE_REFERENCED==%d " +"MAYBE_SHARED==%d, но потом присваивается напрямую. length(правая_часть)==%d; " +"length(левая_часть)==%d)\n" + +#: assign.c:569 +#, c-format +msgid "" +"Direct plonk of unnamed RHS, no copy. MAYBE_REFERENCED==%d, " +"MAYBE_SHARED==%d\n" +msgstr "" +"Прямое, без копии присваивание безымянной правой части. " +"MAYBE_REFERENCED==%d, MAYBE_SHARED==%d\n" + +#: assign.c:638 +#, c-format +msgid "" +"Dropping index '%s' as it doesn't have '__' at the beginning of its name. It " +"was very likely created by v1.9.4 of data.table.\n" +msgstr "" +"Удаление индекса '%s', поскольку он не имеет '__' в начале своего имени. " +"Вероятно, он был создан в версии 1.9.4 data.table.\n" + +#: assign.c:683 assign.c:699 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr "Удаляю индекс '%s' из-за обновления столбца-ключа\n" + +#: assign.c:692 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "Сокращение индекса '%s' до '%s' из-за обновления столбца-ключа\n" + +#: assign.c:750 +#, c-format +msgid "(column %d named '%s')" +msgstr "(столбец №%d, имя '%s')" + +#: assign.c:784 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" +"Невозможно присвоить значение-фактор к «%s». Факторы можно присваивать " +"только столбцам-факторам, строкам или спискам." + +#: assign.c:799 +#, c-format +msgid "" +"Assigning factor numbers to target vector. But %d is outside the level range " +"[1,%d]" +msgstr "" +"Присвоение уровней факторов к целевому вектору. Но %d находится вне " +"диапазона уровней [1,%d]" + +#: assign.c:801 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "" +"Присвоение уровней факторов столбцу №%d под названием '%s'. Но %d находится " +"вне диапазона уровней [1,%d]" + +#: assign.c:811 +#, c-format +msgid "" +"Assigning factor numbers to target vector. But %f is outside the level range " +"[1,%d], or is not a whole number." +msgstr "" +"Присвоение чисел-уровней факторов целевому вектору. Но %f находится вне " +"диапазона уровней [1,%d] или не является целым числом." + +#: assign.c:813 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %f is outside the " +"level range [1,%d], or is not a whole number." +msgstr "" +"Присвоение чисел-уровней факторов столбцу №%d ('%s'). Но %f находится вне " +"диапазона уровней [1,%d] или не является целым числом." + +#: assign.c:819 +#, c-format +msgid "" +"Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " +"character, NA in any type, or level numbers." +msgstr "" +"Не могу присвоить данные типа '%s' столбцу-фактору. Допустимы только " +"факторы, строки, NA любого типа, а также номера уровней." + +#: assign.c:879 +msgid "Unable to allocate working memory of %zu bytes to combine factor levels" +msgstr "Не могу выделить %zu байт, чтобы объединить уровни факторов" + +#: assign.c:906 +#, c-format +msgid "Coercing 'character' RHS to '%s' to match the type of target vector." +msgstr "" +"Привожу строковую правую часть к '%s', чтобы соответствовать типу целевого " +"вектора." + +#: assign.c:908 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of column %d named '%s'." +msgstr "" +"Привожу строковую правую часть к '%s', чтобы соответствовать типу столбца №" +"%d ('%s')." + +#: assign.c:916 +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of target vector." +msgstr "" +"Не могу привести правую часть-список к 'integer64' в целях соответствия типу " +"целевого вектора." + +#: assign.c:918 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of column %d named " +"'%s'." +msgstr "" +"Не могу привести правую часть-список к 'integer64', чтобы соответствовать " +"типу столбца №%d ('%s')." + +#: assign.c:924 +#, c-format +msgid "Coercing 'list' RHS to '%s' to match the type of target vector." +msgstr "" +"Привожу правую часть-список к '%s', чтобы соответствовать типу целевого " +"вектора." + +#: assign.c:926 +#, c-format +msgid "Coercing 'list' RHS to '%s' to match the type of column %d named '%s'." +msgstr "" +"Привожу правую часть-список к '%s', чтобы соответствовать типу столбца №%d " +"('%s')." + +#: assign.c:934 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' target vector.\n" +msgstr "" +"Преобразование типов без копирования при присваивании '%s' к целевому " +"вектору типа '%s'.\n" + +#: assign.c:936 +#, c-format +msgid "" +"Zero-copy coerce when assigning '%s' to column %d named '%s' which is '%s'.\n" +msgstr "" +"Преобразование типов без копирования при присваивании '%s' к столбцу №%d " +"('%s') типа '%s'.\n" + +#: assign.c:952 +#, c-format +msgid "(target vector)" +msgstr "(целевой вектор)" + +#: assign.c:962 assign.c:963 +#, c-format +msgid "" +"%d (type '%s') at RHS position %d taken as TRUE when assigning to type '%s' " +"%s" +msgstr "" +"считаю как TRUE значение %d (типа '%s'), элемент правой части №%d при " +"присваивании типу '%s' %s" + +#: assign.c:965 +#, c-format +msgid "" +"% (type '%s') at RHS position %d taken as TRUE when assigning to " +"type '%s' %s" +msgstr "" +"считаю как TRUE значение % (типа '%s'), элемент правой части №%d при " +"присваивании типу '%s' %s" + +#: assign.c:966 +#, c-format +msgid "" +"%f (type '%s') at RHS position %d taken as TRUE when assigning to type '%s' " +"%s" +msgstr "" +"считаю как TRUE значение %f (типа '%s'), элемент правой части №%d при " +"присваивании типу '%s' %s" + +#: assign.c:970 +#, c-format +msgid "" +"%d (type '%s') at RHS position %d taken as 0 when assigning to type '%s' %s" +msgstr "" +"считаю как 0 значение %d (типа '%s'), элемент правой части №%d при " +"присваивании типу '%s' %s" + +#: assign.c:972 +#, c-format +msgid "" +"% (type '%s') at RHS position %d taken as 0 when assigning to type " +"'%s' %s" +msgstr "" +"считаю как 0 значение % (типа '%s'), элемент правой части №%d при " +"присваивании типу '%s' %s" + +#: assign.c:973 +#, c-format +msgid "" +"%f (type '%s') at RHS position %d either truncated (precision lost) or taken " +"as 0 when assigning to type '%s' %s" +msgstr "" +"округляю (с потерей точности) либо считаю за 0 значение %f (типа '%s'), " +"элемент правой части №%d при присваивании типу '%s' %s" + +#: assign.c:978 +#, c-format +msgid "" +"% (type '%s') at RHS position %d out-of-range (NA) when assigning to " +"type '%s' %s" +msgstr "" +"значение % (типа '%s'), элемент правой части №%d вне допустимого " +"диапазона (NA) при присваивании типу '%s' %s" + +#: assign.c:979 assign.c:986 +#, c-format +msgid "" +"%f (type '%s') at RHS position %d out-of-range(NA) or truncated (precision " +"lost) when assigning to type '%s' %s" +msgstr "" +"значение %f (типа '%s'), элемент правой части №%d вне допустимого диапазона " +"(NA) или округлено (с потерей точности) при присваивании типу '%s' %s" + +#: assign.c:981 assign.c:990 +#, c-format +msgid "" +"%f (type '%s') at RHS position %d either imaginary part discarded or real " +"part truncated (precision lost) when assigning to type '%s' %s" +msgstr "" +"отбрасываю мнимую часть либо округляю с потерей точности значение %f (типа " +"'%s'), элемент правой части №%d при присваивании типу '%s' %s" + +#: assign.c:991 +#, c-format +msgid "" +"%f (type '%s') at RHS position %d imaginary part discarded when assigning to " +"type '%s' %s" +msgstr "" +"отбрасываю мнимую часть значения %f (типа '%s'), элемент правой части №%d " +"при присваивании типу '%s' %s" + +#: assign.c:1036 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "не могу привести значение типа '%s' к типу '%s'" + +#: assign.c:1194 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "Неподдерживаемый тип столбца '%s' в assign.c:memrecycle" + +#: assign.c:1279 +#, c-format +msgid "savetl_init checks failed (%d %d %p %p)" +msgstr "неудачная проверка в savetl_init (%d %d %p %p)" + +#: assign.c:1288 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "Не удалось выделить память для первых %d элементов в savetl_init" + +#: assign.c:1304 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "Не удалось сменить размер выделенных saveds на %d в savetl" + +#: assign.c:1310 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "Не удалось сменить размер выделенных savedl на %d в savetl" + +#: assign.c:1333 +msgid "x must be a character vector" +msgstr "x должен быть строковым вектором" + +#: assign.c:1334 +msgid "'which' must be an integer vector" +msgstr "'which' должен быть целочисленным вектором" + +#: assign.c:1335 +msgid "'new' must be a character vector" +msgstr "'new' должен быть строковым вектором" + +#: assign.c:1336 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "'new' - длины %d. Должен быть такой же длины, что и 'which' (%d)" + +#: assign.c:1339 +#, c-format +msgid "" +"Item %d of 'which' is %d which is outside range of the length %d character " +"vector" +msgstr "" +"Элемент 'which' №%d равен %d, что выходит за границы длины строкового " +"вектора, равной %d" + +#: between.c:18 +#, c-format +msgid "" +"Incompatible vector lengths: length(x)==%d length(lower)==%d " +"length(upper)==%d. Each should be either length 1 or the length of the " +"longest." +msgstr "" +"Несовместимые длины векторов: length(x)==%d; length(lower)==%d; " +"length(upper)==%d. Каждый из них должен быть либо длины 1, либо как самый " +"длинный из векторов." + +#: between.c:25 +msgid "NAbounds must be TRUE or NA" +msgstr "NAbounds должно быть либо TRUE, либо NA" + +#: between.c:70 +#, c-format +msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" +msgstr "" +"Элемент №%d вектора lower (%d) превышает элемент №%d вектора upper (%d)" + +#: between.c:88 +#, c-format +msgid "between parallel processing of integer took %8.3fs\n" +msgstr "в функции between параллельная обработка целых чисел заняла %8.3f с\n" + +#: between.c:94 +msgid "x is integer64 but lower and/or upper are not." +msgstr "x является integer64, а lower и/или upper - нет." + +#: between.c:101 +#, c-format +msgid "" +"Item %d of lower (%) is greater than item %d of upper (%)" +msgstr "" +"Элемент №%d вектора lower (%) превышает элемент №%d вектора upper " +"(%)" + +#: between.c:118 +#, c-format +msgid "between parallel processing of integer64 took %8.3fs\n" +msgstr "в функции between параллельная обработка integer64 заняла %8.3f с\n" + +#: between.c:121 +msgid "" +"x is not integer64 but lower and/or upper is integer64. Please align classes." +msgstr "" +"x не является integer64, а lower и/или upper - являются. Пожалуйста, " +"сделайте классы единообразными." + +#: between.c:128 +#, c-format +msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" +msgstr "" +"Элемент №%d вектора lower (%f) превышает элемент №%d вектора upper (%f)" + +#: between.c:146 +#, c-format +msgid "between parallel processing of double with open bounds took %8.3fs\n" +msgstr "" +"в функции between параллельная обработка чисел с плавающей запятой на " +"открытом интервале заняла %8.3f с\n" + +#: between.c:163 +#, c-format +msgid "between parallel processing of double with closed bounds took %8.3fs\n" +msgstr "" +"в функции between параллельная обработка чисел с плавающей запятой на " +"отрезке заняла %8.3f с\n" + +#: between.c:178 +#, c-format +msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" +msgstr "" +"Элемент №%d вектора lower ('%s') сортируется выше элемента №%d вектора upper " +"('%s')" + +#: between.c:193 +#, c-format +msgid "between non-parallel processing of character took %8.3fs\n" +msgstr "в функции between не-параллельная обработка строк заняла %8.3f с\n" + +#: bmerge.c:65 +#, c-format +msgid "icols[%d]=%d outside range [1,length(i)=%d]" +msgstr "icols[%d]=%d вне допустимого диапазона [1, length(i)=%d]" + +#: bmerge.c:66 +#, c-format +msgid "xcols[%d]=%d outside range [1,length(x)=%d]" +msgstr "xcols[%d]=%d вне допустимого диапазона [1, length(x)=%d]" + +#: bmerge.c:72 +#, c-format +msgid "Type '%s' is not supported for joining/merging" +msgstr "Тип '%s' не поддерживается для операции соединения" + +#: bmerge.c:78 +msgid "roll is character but not 'nearest'" +msgstr "аргумент 'roll' является строкой, но не \"nearest\"" + +#: bmerge.c:79 +msgid "roll='nearest' can't be applied to a character column, yet." +msgstr "roll='nearest' пока что нельзя применять к строковым столбцам." + +#: bmerge.c:87 +msgid "rollends must be a length 2 logical vector" +msgstr "rollends должен быть логическим вектором длины 2" + +#: bmerge.c:116 +msgid "Only '==' operator is supported for columns of type character." +msgstr "Только оператор '==' поддерживается для строковых столбцов." + +#: chmatch.c:5 +#, c-format +msgid "table is type '%s' (must be 'character' or NULL)" +msgstr "table типа '%s' (должна быть типа 'character' либо NULL)" + +#: chmatch.c:19 +#, c-format +msgid "x is type '%s' (must be 'character' or NULL)" +msgstr "x типа '%s' (должен быть типа 'character' либо NULL)" + +#: chmatch.c:106 +#, c-format +msgid "" +"Failed to allocate % bytes working memory in chmatchdup: " +"length(table)=%d length(unique(table))=%d" +msgstr "" +"Не могу выделить % байт памяти в функции chmatchdup: " +"length(table)=%d length(unique(table))=%d" + +#: cj.c:95 +#, c-format +msgid "Type '%s' is not supported by CJ." +msgstr "CJ не поддерживает тип '%s'." + +#: coalesce.c:20 +msgid "" +"The first argument is a list, data.table or data.frame. In this case there " +"should be no other arguments provided." +msgstr "" +"Первый переданный аргумент является списком, data.frame или data.table. В " +"этом случае других аргументов быть не должно." + +#: coalesce.c:36 +#, c-format +msgid "" +"Item 1 is a factor but item %d is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" +"Элемент №1 является фактором, но элемент №%d - не фактор. Все элементы " +"должны быть факторами, если есть хотя бы один фактор." + +#: coalesce.c:38 +#, c-format +msgid "" +"Item %d is a factor but its levels are not identical to the first item's " +"levels." +msgstr "" +"Элемент №%d является фактором, но его уровни не совпадают с уровнями первого " +"элемента." + +#: coalesce.c:42 +#, c-format +msgid "" +"Item %d is a factor but item 1 is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" +"Элемент №%d является фактором, но элемент №1 - не фактор. Все элементы " +"должны быть факторами, если есть хотя бы один фактор." + +#: coalesce.c:45 +#, c-format +msgid "" +"Item %d is type %s but the first item is type %s. Please coerce before " +"coalescing." +msgstr "" +"Элемент №%d - типа %s, но первый элемент - типа %s. Пожалуйста, приведите " +"всё к единому типу перед вызовом fcoalesce." + +#: coalesce.c:47 +#, c-format +msgid "Item %d has a different class than item 1." +msgstr "Класс элемента №%d отличается от класса элемента №1." + +#: coalesce.c:50 +#, c-format +msgid "" +"Item %d is length %d but the first item is length %d. Only singletons are " +"recycled." +msgstr "" +"Элемент №%d длины %d, но первый элемент - длины %d. Только векторы длины 1 " +"будут рециркулированы." + +#: coalesce.c:54 +msgid "coalesce copied first item (inplace=FALSE)\n" +msgstr "операция coalesce скопировала первый аргумент (inplace=FALSE)\n" + +#: coalesce.c:170 fifelse.c:199 shift.c:171 uniqlist.c:98 uniqlist.c:130 +#: uniqlist.c:211 uniqlist.c:248 uniqlist.c:321 +#, c-format +msgid "Type '%s' is not supported" +msgstr "Тип '%s' не поддерживается" + +#: dogroups.c:82 gsumm.c:48 +msgid "env is not an environment" +msgstr "env не является окружением" + +#: dogroups.c:133 +msgid "row.names attribute of .SD not found" +msgstr "у .SD не нашлось атрибута row.names" + +#: dogroups.c:135 +#, c-format +msgid "" +"row.names of .SD isn't integer length 2 with NA as first item; i.e., ." +"set_row_names(). [%s %d %d]" +msgstr "" +"у .SD атрибут row.names не является целочисленным вектором с NA в качестве " +"первого элемента; см. .set_row_names(). [%s %d %d]" + +#: dogroups.c:166 +#, c-format +msgid "length(iSD)[%d] != length(jiscols)[%d]" +msgstr "length(iSD)[%d] != length(jiscols)[%d]" + +#: dogroups.c:167 +#, c-format +msgid "length(xSD)[%d] != length(xjiscols)[%d]" +msgstr "length(xSD)[%d] != length(xjiscols)[%d]" + +#: dogroups.c:278 +#, c-format +msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." +msgstr "" +"результат вычисления j имеет тип '%s'. Он должен давать список или атомарный " +"вектор." + +#: dogroups.c:287 +#, c-format +msgid "" +"Entry %d for group %d in j=list(...) should be atomic vector or list. If you " +"are trying something like j=list(.SD,newcol=mean(colA)) then use := by group " +"instead (much quicker), or cbind or merge afterwards." +msgstr "" +"Элемент №%d для группы %d в j=list(...) должен быть атомарным вектором или " +"списком. Если Вы пытаетесь сделать что-то вроде j=list(.SD," +"newcol=mean(colA)), лучше воспользуйтесь := по группам (это гораздо " +"быстрее), либо cbind()/merge() в качестве следующего шага." + +#: dogroups.c:294 +#, c-format +msgid "" +"Entry %d for group %d in j=list(...) is an array with %d dimensions > 1, " +"which is disallowed. \"Break\" the array yourself with c() or as.vector() if " +"that is intentional." +msgstr "" +"Элемент №%d для группы %d в j=list(...) является многомерным массивом (%d > " +"1 измерения), что не разрешено. Используйте с() или as.vector(), чтобы " +"удалить измерения." + +#: dogroups.c:304 +msgid "" +"RHS of := is NULL during grouped assignment, but it's not possible to delete " +"parts of a column." +msgstr "" +"Правая часть := оказалась NULL в ходе группового присваивания. Не могу " +"удалить только часть столбца." + +#: dogroups.c:308 +#, c-format +msgid "" +"Supplied %d items to be assigned to group %d of size %d in column '%s'. The " +"RHS length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" +"Передано %d элементов для присваивания группе %d размером %d в столбце '%s'. " +"Длина правой части должна быть либо 1, либо в точности равна длине левой " +"части. Если хотите \"рециркулировать\" вектор другой длины, используйте " +"rep() явным (в т.ч. для читателей кода) образом." + +#: dogroups.c:340 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "Группа %d, столбец '%s': %s" + +#: dogroups.c:347 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "вычисление j даёт разное количество столбцов для разных групп" + +#: dogroups.c:381 +#, c-format +msgid "" +"Column %d of j's result for the first group is NULL. We rely on the column " +"types of the first result to decide the type expected for the remaining " +"groups (and require consistency). NULL columns are acceptable for later " +"groups (and those are replaced with NA of appropriate type and recycled) but " +"not for the first. Please use a typed empty vector instead, such as " +"integer() or numeric()." +msgstr "" +"Столбец %d результата вычисления 'j' для первой группы является NULL. Типы " +"столбцов первого результата определяют типы столбцов для последующих " +"результатов. Столбцы-NULL допустимы для последующих групп (и будут заменены " +"на NA соответствующего типа), но не для самой первой. Пожалуйста, " +"используйте вектор нулевой длины соответствующего типа, например, integer() " +"или numeric()." + +#: dogroups.c:384 +msgid "" +"j appears to be a named vector. The same names will likely be created over " +"and over again for each group and slow things down. Try and pass a named " +"list (which data.table optimizes) or an unnamed list() instead.\n" +msgstr "" +"похоже, j является именованным вектором. Вычисление j для каждой группы, " +"вероятно, приведёт к повторному созданию этих имён. Попробуйте поместить в j " +"вызов list(...) с именами (для него в data.table есть оптимизация) либо " +"неименованный список.\n" + +#: dogroups.c:386 +#, c-format +msgid "" +"Column %d of j is a named vector (each item down the rows is named, " +"somehow). Please remove those names for efficiency (to save creating them " +"over and over for each group). They are ignored anyway.\n" +msgstr "" +"Столбец №%d результата вычисления j является именованным вектором (почему-то " +"каждый его элемент имеет имя). Для повышения эффективности, пожалуйста, " +"уберите имена, чтобы не создавать их заново для каждой группы. Их потом всё " +"равно игнорируют.\n" + +#: dogroups.c:394 +msgid "" +"The result of j is a named list. It's very inefficient to create the same " +"names over and over again for each group. When j=list(...), any names are " +"detected, removed and put back after grouping has completed, for efficiency. " +"Using j=transform(), for example, prevents that speedup (consider changing " +"to :=). This message may be upgraded to warning in future.\n" +msgstr "" +"Результатом вычисления j является именованный список. Создавать имена заново " +"для каждой группы - не очень-то эффективно. Для формы j=list(...) есть " +"оптимизация, которая находит и создаёт имена только один раз, но для других " +"форм, которые могут возвращать именованные списки (например, " +"j=transform(...), что лучше заменить на :=) таких оптимизаций нет. В будущем " +"это сообщение может стать предупреждением.\n" + +#: dogroups.c:406 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "dogroups: увеличение с %d до %d строк\n" + +#: dogroups.c:426 +#, c-format +msgid "" +"Item %d of j's result for group %d is zero length. This will be filled with " +"%d NAs to match the longest column in this result. Later groups may have a " +"similar problem but only the first is reported to save filling the warning " +"buffer." +msgstr "" +"Элемент №%d результата вычисления j для группы %d имеет длину 0. Он будет " +"заполнен NA в количестве %d, что соответствует самому длинному столбцу в " +"данной группе. Для последующих групп это сообщение выведено не будет." + +#: dogroups.c:433 +#, c-format +msgid "" +"Column %d of result for group %d is type '%s' but expecting type '%s'. " +"Column types must be consistent for each group." +msgstr "" +"Столбец %d результата вычисления для группы %d имеет тип '%s', хотя должен " +"быть '%s'. Типы соответствующих столбцов должны совпадать между группами." + +#: dogroups.c:435 +#, c-format +msgid "" +"Supplied %d items for column %d of group %d which has %d rows. The RHS " +"length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" +"Передано %d элементов для столбца №%d группы %d, в которой %d строк. Длина " +"правой части присваивания должна быть либо 1, либо в точности совпадать с " +"длиной левой части присваивания. Если Вы хотите рециркулировать элементы, " +"пожалуйста, явным образом (в т.ч. для читателей) используйте rep()." + +#: dogroups.c:453 fsort.c:266 fwrite.c:733 +msgid "\n" +msgstr "\n" + +#: dogroups.c:454 dogroups.c:468 +#, c-format +msgid "" +"Processed %d groups out of %d. %.0f%% done. Time elapsed: %ds. ETA: %ds." +msgstr "" +"Обработано %d групп из %d. Всего сделано %.0f%%. Прошло времени: %d с. " +"Осталось: %d с." + +#: dogroups.c:473 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "Записано меньше строк (%d), чем для них выделено памяти (%d).\n" + +#: dogroups.c:497 +#, c-format +msgid "" +"\n" +" collecting discontiguous groups took %.3fs for %d groups\n" +msgstr "" +"\n" +" сбор несмежных групп занял %.3f с для %d групп\n" + +#: dogroups.c:498 +#, c-format +msgid "" +"\n" +" memcpy contiguous groups took %.3fs for %d groups\n" +msgstr "" +"\n" +" memcpy() для смежных групп заняло %.3f с для %d групп\n" + +#: dogroups.c:500 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr " eval(j) заняло %.3f с для %d вызовов\n" + +#: dogroups.c:529 +msgid "growVector passed NULL" +msgstr "функции growVector передан NULL" + +#: fastmean.c:39 rbindlist.c:8 rbindlist.c:12 +#, c-format +msgid "%s should be TRUE or FALSE" +msgstr "%s должно быть либо TRUE, либо FALSE" + +#: fastmean.c:45 +#, c-format +msgid "fastmean was passed type %s, not numeric or logical" +msgstr "" +"функции fastmean передано значение типа %s, не являющееся численным либо " +"логическим" + +#: fcast.c:101 +#, c-format +msgid "Unsupported column type in fcast val: '%s'" +msgstr "Неподдерживаемый тип столбца в функции fcast: '%s'" + +#: fifelse.c:11 +msgid "Argument 'test' must be logical." +msgstr "Аргумент 'test' должен быть логическим." + +#: fifelse.c:15 +msgid "S4 class objects (except nanotime) are not supported." +msgstr "Объекты классов S4, кроме 'nanotime', не поддерживаются." + +#: fifelse.c:30 +#, c-format +msgid "" +"Length of 'yes' is % but must be 1 or length of 'test' (%)." +msgstr "" +"Длина 'yes' составляет %, но должна быть либо 1, либо длины " +"'test' (%)." + +#: fifelse.c:32 +#, c-format +msgid "" +"Length of 'no' is % but must be 1 or length of 'test' (%)." +msgstr "" +"Длина 'no' составляет %, но должна быть либо 1, либо длины " +"'test' (%)." + +#: fifelse.c:34 +#, c-format +msgid "" +"Length of 'na' is % but must be 1 or length of 'test' (%)." +msgstr "" +"Длина 'na' составляет %, но должна быть либо 1, либо длины " +"'test' (%)." + +#: fifelse.c:52 +#, c-format +msgid "" +"'no' is of type %s but '%s' is %s. Please make all arguments have the same " +"type." +msgstr "" +"'no' типа %s, хотя '%s' типа %s. Пожалуйста, сделайте все аргументы одного " +"типа." + +#: fifelse.c:58 +#, c-format +msgid "" +"'na' is of type %s but '%s' is %s. Please make all arguments have the same " +"type." +msgstr "" +"'na' типа %s, хотя '%s' типа %s. Пожалуйста, сделайте все аргументы одного " +"типа." + +#: fifelse.c:63 +msgid "" +"'yes' has different class than 'no'. Please make sure that both arguments " +"have the same class." +msgstr "" +"Класс 'yes' отличается от класса 'no'. Пожалуйста, сделайте оба аргумента " +"одного класса." + +#: fifelse.c:68 +msgid "" +"'yes' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "" +"Класс 'yes' отличается от класса 'na'. Пожалуйста, сделайте оба аргумента " +"одного класса." + +#: fifelse.c:73 +msgid "" +"'no' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "" +"Класс 'no' отличается от класса 'na'. Пожалуйста, сделайте оба аргумента " +"одного класса." + +#: fifelse.c:80 +msgid "'yes' and 'no' are both type factor but their levels are different." +msgstr "'yes' и 'no' оба являются факторами, но их уровни отличаются." + +#: fifelse.c:85 +msgid "'yes' and 'na' are both type factor but their levels are different." +msgstr "'yes' и 'na' оба являются факторами, но их уровни отличаются." + +#: fifelse.c:90 +msgid "'no' and 'na' are both type factor but their levels are different." +msgstr "'no' и 'na' оба являются факторами, но их уровни отличаются." + +#: fifelse.c:213 +#, c-format +msgid "" +"Received %d inputs; please supply an even number of arguments in ..., " +"consisting of logical condition, resulting value pairs (in that order). Note " +"that the default argument must be named explicitly, e.g., default=0" +msgstr "" +"Получено %d входных аргументов; пожалуйста, передайте чётное количество " +"аргументов в ..., состоящее из пар (логическое условие, желаемое значение). " +"Обратите внимание, что аргумент default должен быть явным образом именован " +"(например, 'default = 0')" + +#: fifelse.c:235 +msgid "" +"S4 class objects (except nanotime) are not supported. Please see https://" +"github.com/Rdatatable/data.table/issues/4131." +msgstr "" +"Объекты классов S4 (кроме nanotime) не поддерживаются. См. https://github." +"com/Rdatatable/data.table/issues/4131." + +#: fifelse.c:238 +#, c-format +msgid "Argument #%d must be logical but was of type %s." +msgstr "Аргумент №%d должен быть логическим, но оказался типа %s." + +#: fifelse.c:260 +#, c-format +msgid "" +"Argument #%d has length %lld which differs from that of argument #1 (%lld). " +"Please make sure all logical conditions have the same length." +msgstr "" +"Аргумент №%d оказался длины %lld, что отличается от длины аргумента №1 " +"(%lld). Пожалуйста, сделайте все векторы условий одинаковой длины." + +#: fifelse.c:266 +#, c-format +msgid "" +"Resulting value is of type %s but 'default' is of type %s. Please make sure " +"that both arguments have the same type." +msgstr "" +"Результат вычисления оказался типа %s, но 'default' типа %s. Пожалуйста, " +"сделайте оба аргумента одного типа." + +#: fifelse.c:269 +#, c-format +msgid "" +"Argument #%d is of type %s, however argument #2 is of type %s. Please make " +"sure all output values have the same type." +msgstr "" +"Аргумент №%d оказался типа %s, но аргумент №2 - типа %s. Пожалуйста, " +"сделайте все результирующие значения одного типа." + +#: fifelse.c:277 +msgid "" +"Resulting value has different class than 'default'. Please make sure that " +"both arguments have the same class." +msgstr "" +"Класс результирующего значения отличается от класса 'default'. Пожалуйста, " +"сделайте оба аргумента одного класса." + +#: fifelse.c:280 +#, c-format +msgid "" +"Argument #%d has different class than argument #2, Please make sure all " +"output values have the same class." +msgstr "" +"Аргумент №%d оказался не того же класса, что аргумент №2. Пожалуйста, " +"сделайте все результирующие значения одного класса." + +#: fifelse.c:289 +msgid "" +"Resulting value and 'default' are both type factor but their levels are " +"different." +msgstr "" +"Результирующее значение и 'default' оба факторы, но их уровни различаются." + +#: fifelse.c:291 +#, c-format +msgid "" +"Argument #2 and argument #%d are both factor but their levels are different." +msgstr "Аргумент №2 и аргумент №%d оба факторы, но их уровни различаются." + +#: fifelse.c:300 +#, c-format +msgid "Length of 'default' must be 1 or %lld." +msgstr "Длина 'default' должна быть либо 1, либо %lld." + +#: fifelse.c:302 +#, c-format +msgid "" +"Length of output value #%d (%lld) must either be 1 or match the length of " +"the logical condition (%lld)." +msgstr "" +"Длина результирующего значения №%d (%lld) должна быть либо 1, либо совпадать " +"с длиной условия (%lld)." + +#: fifelse.c:407 +#, c-format +msgid "Type '%s' is not supported." +msgstr "Тип '%s' не поддерживается." + +#: fmelt.c:18 +msgid "'x' must be an integer" +msgstr "'x' должен быть целочисленным вектором" + +#: fmelt.c:19 +msgid "'n' must be a positive integer" +msgstr "'n' должен быть положительным целым" + +#: fmelt.c:41 +msgid "Argument to 'which' must be logical" +msgstr "Аргумент для функции 'which' должен быть логическим вектором" + +#: fmelt.c:65 +msgid "concat: 'vec' must be a character vector" +msgstr "в функции concat: 'vec' должен быть строковым вектором" + +#: fmelt.c:67 +msgid "concat: 'idx' must be an integer vector" +msgstr "в функции concat: 'idx' должен быть целочисленным вектором" + +#: fmelt.c:135 +#, c-format +msgid "Unknown 'measure.vars' type %s at index %d of list" +msgstr "Неизвестный тип %s 'measure.vars' в элементе списка №%d" + +#: fmelt.c:188 +msgid "One or more values in 'measure.vars' is invalid." +msgstr "Некоторые значения в 'measure.vars' являются некорректными." + +#: fmelt.c:190 +msgid "One or more values in 'id.vars' is invalid." +msgstr "Некоторые значения в 'id.vars' являются некорректными." + +#: fmelt.c:214 +#, c-format +msgid "" +"Unknown 'measure.vars' type %s, must be character or integer vector/list" +msgstr "" +"Неизвестный тип %s 'measure.vars': должен быть вектором или списком строк " +"или целых чисел" + +#: fmelt.c:216 +#, c-format +msgid "Unknown 'id.vars' type %s, must be character or integer vector" +msgstr "" +"Неизвестный тип %s 'id.vars': должен быть вектором строк или целых чисел" + +#: fmelt.c:241 +#, c-format +msgid "" +"id.vars and measure.vars are internally guessed when both are 'NULL'. All " +"non-numeric/integer/logical type columns are considered id.vars, which in " +"this case are columns [%s]. Consider providing at least one of 'id' or " +"'measure' vars in future." +msgstr "" +"Пытаюсь угадать id.vars и measure.vars, когда оба равны 'NULL'. Считаю все " +"не-числовые/логические столбцы id.vars, в этом случае [%s]. Пожалуйста, в " +"будущем передавайте хотя бы 'id.vars' или 'measure.vars'." + +#: fmelt.c:247 +msgid "" +"'measure.vars' is missing. Assigning all columns other than 'id.vars' " +"columns as 'measure.vars'.\n" +msgstr "" +"Аргумент 'measure.vars' не передан. Считаю ими все столбцы, которые не 'id." +"vars'.\n" + +#: fmelt.c:249 +#, c-format +msgid "Assigned 'measure.vars' are [%s].\n" +msgstr "Назначаю столбцы 'measure.vars' [%s].\n" + +#: fmelt.c:260 +msgid "" +"'id.vars' is missing. Assigning all columns other than 'measure.vars' " +"columns as 'id.vars'.\n" +msgstr "" +"Аргумент 'id.vars' не передан. Считаю ими все столбцы, которые не 'measure." +"vars'.\n" + +#: fmelt.c:261 +#, c-format +msgid "Assigned 'id.vars' are [%s].\n" +msgstr "Назначаю столбцы 'id.vars' [%s].\n" + +#: fmelt.c:315 +msgid "" +"When 'measure.vars' is a list, 'value.name' must be a character vector of " +"length =1 or =length(measure.vars)." +msgstr "" +"Если 'measure.vars' является списком, 'value.name' должен быть строковым " +"вектором длины 1 либо длины 'measure.vars'." + +#: fmelt.c:316 +msgid "" +"When 'measure.vars' is either not specified or a character/integer vector, " +"'value.name' must be a character vector of length =1." +msgstr "" +"Если 'measure.vars' не передан либо является строковым/целочисленным " +"вектором, 'value.name' должен быть одной строкой." + +#: fmelt.c:319 +msgid "'variable.name' must be a character/integer vector of length 1." +msgstr "'variable.name' должен быть одной сторокой или одним целым числом." + +#: fmelt.c:372 +msgid "" +"variable_table attribute of measure.vars should be a data table with at " +"least one column" +msgstr "" +"атрибут measure.vars \"variable_table\" должен быть data.table с как минимум " +"одним столбцом" + +#: fmelt.c:377 +#, c-format +msgid "" +"variable_table attribute of measure.vars should be a data table with same " +"number of rows as max length of measure.vars vectors =%d" +msgstr "" +"атрибут measure.vars \"variable_table\" должен быть data.table с тем же " +"количеством строк, что максимальная длина векторов 'measure.vars', %d" + +#: fmelt.c:381 +msgid "" +"variable_table attribute of measure.vars should be either NULL or a data " +"table" +msgstr "" +"атрибут measure.vars \"variable_table\" должен быть либо NULL, либо data." +"table" + +#: fmelt.c:464 +#, c-format +msgid "" +"'measure.vars' [%s] are not all of the same type. By order of hierarchy, the " +"molten data value column will be of type '%s'. All measure variables not of " +"type '%s' will be coerced too. Check DETAILS in ?melt.data.table for more on " +"coercion.\n" +msgstr "" +"'measure.vars' [%s] не все одного типа. После приведения типов столбец " +"получится типа '%s'. Все переменные не типа '%s' будут преобразованы. " +"Подробнее про приведение типов см. секцию \"Details\" в ?melt.data.table.\n" + +#: fmelt.c:576 +#, c-format +msgid "Unknown column type '%s' for column '%s'." +msgstr "Неизвестный тип столбца '%s' для столбца '%s'." + +#: fmelt.c:686 +#, c-format +msgid "variable_table does not support column type '%s' for column '%s'." +msgstr "'variable_type' не поддерживает тип столбца '%s' для столбца '%s'." + +#: fmelt.c:780 +#, c-format +msgid "Unknown column type '%s' for column '%s' in 'data'" +msgstr "Неизвестный тип '%s' столбца '%s' в 'data'" + +#: fmelt.c:791 +msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" +msgstr "" +"Входное значение не типа VECSXP, а должно быть data.table, data.frame или " +"хотя бы списком" + +#: fmelt.c:792 +msgid "Argument 'value.factor' should be logical TRUE/FALSE" +msgstr "Аргумент 'value.factor' должен быть либо TRUE, либо FALSE" + +#: fmelt.c:793 +msgid "Argument 'variable.factor' should be logical TRUE/FALSE" +msgstr "Аргумент 'variable.factor' должен быть либо TRUE, либо FALSE" + +#: fmelt.c:794 +msgid "Argument 'na.rm' should be logical TRUE/FALSE." +msgstr "Аргумент 'na.rm' должен быть либо TRUE, либо FALSE." + +#: fmelt.c:795 +msgid "Argument 'variable.name' must be a character vector" +msgstr "Аргумент 'variable.factor' должен быть строковым вектором" + +#: fmelt.c:796 +msgid "Argument 'value.name' must be a character vector" +msgstr "Аргумент 'value.name' должен быть строковым вектором" + +#: fmelt.c:797 +msgid "Argument 'verbose' should be logical TRUE/FALSE" +msgstr "Аргумент 'verbose' должен быть либо TRUE, либо FALSE" + +#: fmelt.c:801 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "" +"ncol(data) равно 0, обрабатывать нечего. Возвращаю исходную data.table." + +#: forder.c:111 utils.c:460 +msgid "Internal error in" +msgstr "Внутренняя ошибка в" + +#: forder.c:111 utils.c:460 +msgid "Please report to the data.table issues tracker." +msgstr "Пожалуйста, сообщите об этом в систему отслеживания ошибок data.table." + +#: forder.c:121 +#, c-format +msgid "Failed to realloc thread private group size buffer to %d*4bytes" +msgstr "" +"Не удалось изменить до %d*4 байт размер выделенной памяти под размеры групп " +"внутри потока" + +#: forder.c:135 +#, c-format +msgid "Failed to realloc group size result to %d*4bytes" +msgstr "" +"Не удалось изменить до %d*4 байт размер выделенной памяти под длины групп" + +#: forder.c:269 +#, c-format +msgid "" +"Logical error. counts[0]=%d in cradix but should have been decremented to 0. " +"radix=%d" +msgstr "" +"Логическая ошибка. В функции cradix counts[0]=%d, хотя должен был " +"уменьшиться до 0. radix=%d" + +#: forder.c:287 +msgid "Failed to alloc cradix_counts and/or cradix_tmp" +msgstr "Не удалось выделить память под cradix_counts и/или cradix_tmp" + +#: forder.c:320 +#, c-format +msgid "Unable to realloc %d * %d bytes in range_str" +msgstr "" +"Не удалось изменить размер выделенной памяти до %d * %d байт в range_str" + +#: forder.c:347 +msgid "Failed to alloc ustr3 when converting strings to UTF8" +msgstr "Не удалось выделить память под ustr3 при переводе строк в UTF-8" + +#: forder.c:366 +msgid "Failed to alloc tl when converting strings to UTF8" +msgstr "Не удалось выделить tl при переводе строк в UTF-8" + +#: forder.c:395 +msgid "Must an integer or numeric vector length 1" +msgstr "Должно быть целым или действительным числом" + +#: forder.c:396 +msgid "Must be 2, 1 or 0" +msgstr "Должно быть 2, 1 или 0" + +#: forder.c:431 +msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" +msgstr "Неизвестное не-конечное число: ни NA, ни NaN, ни +/- бесконечность" + +#: forder.c:470 +msgid "" +"Input is an atomic vector (not a list of columns) but order= is not a length " +"1 integer" +msgstr "" +"Передан атомарный вектор (а не список столбцов), но order= не является одним " +"целым числом" + +#: forder.c:472 +#, c-format +msgid "forder.c received a vector type '%s' length %d\n" +msgstr "forder.c получил вектор типа '%s' длиной %d\n" + +#: forder.c:480 +#, c-format +msgid "forder.c received %d rows and %d columns\n" +msgstr "forder.c получил %d строк и %d столбцов\n" + +#: forder.c:490 +#, c-format +msgid "'order' length (%d) is different to by='s length (%d)" +msgstr "длина 'order' (%d) отличается от длины by= (%d)" + +#: forder.c:504 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d), are you " +"attempting to order by a list column?\n" +msgstr "" +"Столбец №%d - длины %d, что отличается от длины столбца №%d. Возможно, в " +"качестве ключа сортировки передан столбец-список?\n" + +#: forder.c:508 +msgid "retGrp must be TRUE or FALSE" +msgstr "retGrp должно быть TRUE или FALSE" + +#: forder.c:511 +msgid "retStats must be TRUE or FALSE" +msgstr "retStats должно быть TRUE или FALSE" + +#: forder.c:516 +msgid "sort must be TRUE or FALSE" +msgstr "sort должно быть TRUE или FALSE" + +#: forder.c:519 +msgid "At least one of retGrp= or sort= must be TRUE" +msgstr "Хотя бы один аргумент из retGtp= и sort= должен быть TRUE" + +#: forder.c:521 +msgid "na.last must be logical TRUE, FALSE or NA of length 1" +msgstr "na.last должен быть TRUE, FALSE, или NA_logical_" + +#: forder.c:555 forder.c:669 +#, c-format +msgid "Unable to allocate % bytes of working memory" +msgstr "Не удалось выделить % байт оперативной памяти" + +#: forder.c:573 +#, c-format +msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." +msgstr "" +"Элемент 'order' №%d (сортировка по возрастанию/убыванию) равен %d, а должен " +"быть +/-1." + +#: forder.c:603 +#, c-format +msgid "" +"\n" +"*** Column %d passed to forder is a date stored as an 8 byte double but no " +"fractions are present. Please consider a 4 byte integer date such as IDate " +"to save space and time.\n" +msgstr "" +"\n" +"*** Столбец №%d, переданный forder, хранит даты в виде 8-байтных чисел с " +"плавающей запятой, но все числа целые. Возможно, лучше будет использовать 4-" +"байтный класс IDate, чтобы сэкономить время и место.\n" + +#: forder.c:615 +#, c-format +msgid "Column %d passed to [f]order is type '%s', not yet supported." +msgstr "" +"Столбец №%d, переданный [f]order, оказался типа '%s', что пока не " +"поддерживается." + +#: forder.c:792 +#, c-format +msgid "" +"Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" +msgstr "" +"Не удалось выделить оперативную память под TMP или UGRP, либо они не были " +"выровнены по границе линии кэш-памяти: nth=%d" + +#: forder.c:801 +msgid "Could not allocate (very tiny) group size thread buffers" +msgstr "" +"Не удалось выделить (совсем немного) оперативной памяти под принадлежащие " +"потокам буферы размеров групп" + +#: forder.c:869 +#, c-format +msgid "Timing block %2d%s = %8.3f %8d\n" +msgstr "Время блока %2d%s = %8.3f %8d\n" + +#: forder.c:919 forder.c:989 forder.c:1011 forder.c:1113 forder.c:1244 +#: forder.c:1300 fread.c:2643 +#, c-format +msgid "Failed to allocate %d bytes for '%s'." +msgstr "Не удалось выделить %d байт оперативной памяти под '%s'." + +#: forder.c:1144 +#, c-format +msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" +msgstr "" +"Не удалось выделить память под счета параллельных блоков. my_n=%d, nBatch=%d" + +#: forder.c:1156 +#, c-format +msgid "Failed to allocate 'my_otmp' and/or 'my_ktmp' arrays (%d bytes)." +msgstr "" +"Не удалось выделить память под массивы 'my_otmp' и/или 'my_ktmp' (%d байт)." + +#: forder.c:1261 +#, c-format +msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" +msgstr "" +"Не удалось выделить память под TMP для my_n=%d элементов при подсчёте " +"параллельных блоков" + +#: forder.c:1376 forder.c:1427 +#, c-format +msgid "issorted 'by' [%d] out of range [1,%d]" +msgstr "в функции issorted 'by' [%d] вне диапазона [1,%d]" + +#: forder.c:1381 +msgid "is.sorted does not work on list columns" +msgstr "is.sorted не работает на столбцах-списках" + +#: forder.c:1414 forder.c:1444 forder.c:1478 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "тип '%s' пока не поддерживается" + +#: forder.c:1491 +msgid "x must be either NULL or an integer vector" +msgstr "x должен быть либо NULL, либо целочисленный вектор" + +#: forder.c:1493 +msgid "nrow must be integer vector length 1" +msgstr "nrow должен быть одним целым числом" + +#: forder.c:1495 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "nrow==%d, но должен быть >= 0" + +#: forder.c:1512 +msgid "x must be type 'double'" +msgstr "x должен быть типа 'double'" + +#: frank.c:14 frank.c:192 +#, c-format +msgid "Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]" +msgstr "Элемент вектора 'cols' №%d равен %d, что вне диапазона [1, ncol(x)=%d]" + +#: frank.c:24 frank.c:200 +#, c-format +msgid "" +"Column %d of input list x is length %d, inconsistent with first column of " +"that item which is length %d." +msgstr "" +"Столбец №%d входного списка 'x' имеет длину %d, что несовместимо с первым " +"столбцом, который имеет длину %d." + +#: frank.c:101 frank.c:234 transpose.c:97 +#, c-format +msgid "Unsupported column type '%s'" +msgstr "Неподдерживаемый тип столбца '%s'" + +#: fread.c:155 +#, c-format +msgid "System error %lu unmapping view of file\n" +msgstr "" +"Системная ошибка %lu при попытке удалить отображение файла в адресное " +"пространство\n" + +#: fread.c:158 +#, c-format +msgid "System errno %d unmapping file: %s\n" +msgstr "" +"Системная ошибка %d при попытке удалить отображение файла в адресное " +"пространство: %s\n" + +#: fread.c:1308 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "" +"Предыдущий вызов fread() не был корректно завершён. Оставшиеся ресурсы " +"возвращены в начале этого вызова fread().\n" + +#: fread.c:1311 +msgid "[01] Check arguments\n" +msgstr "[01] Проверка аргументов\n" + +#: fread.c:1318 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr " Использую %d потоков (omp_get_max_threads()=%d, nth=%d)\n" + +#: fread.c:1340 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "" +"freadMain: NAstring «%s» содержит пробельные символы в начале или конце" + +#: fread.c:1344 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "" +"freadMain: NAstring «%s» распознаётся как логическая, что не разрешено." + +#: fread.c:1346 fread.c:1348 +#, c-format +msgid "freadMain: NAstring <<%s>> and %s=TRUE, this is not permitted." +msgstr "freadMain: NAstring «%s» и %s=TRUE, что не разрешено." + +#: fread.c:1361 +msgid " No NAstrings provided.\n" +msgstr " NAstrings не указаны.\n" + +#: fread.c:1368 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr " Одна или несколько NAstrings выглядят как число.\n" + +#: fread.c:1370 +msgid " None of the NAstrings look like numbers.\n" +msgstr " Ни одна из NAstrings не выглядят как числа.\n" + +#: fread.c:1372 +#, c-format +msgid " skip num lines = %\n" +msgstr " пропускаю строк = %\n" + +#: fread.c:1373 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr " пропустить до строки = «%s»\n" + +#: fread.c:1374 +#, c-format +msgid " show progress = %d\n" +msgstr " показывать индикатор выполнения = %d\n" + +#: fread.c:1375 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr " буду читать столбцы из 0/1 как %s\n" + +#: fread.c:1376 +#, c-format +msgid " Y/N column will be read as %s\n" +msgstr " буду читать столбцы с «Y»/«N» как %s\n" + +#: fread.c:1388 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "sep == quote ('%c') не разрешено" + +#: fread.c:1389 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "sep == dec ('%c') не разрешено" + +#: fread.c:1390 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "quote == dec ('%c') не разрешено" + +#: fread.c:1407 +msgid "[02] Opening the file\n" +msgstr "[02] Открываю файл\n" + +#: fread.c:1410 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "" +" вместо имени файла передан аргумент `input`, интерпретирую как текст, " +"который нужно считать\n" + +#: fread.c:1417 +#, c-format +msgid " Opening file %s\n" +msgstr " Открываю файл %s\n" + +#: fread.c:1421 fread.c:1450 +#, c-format +msgid "File not found: %s" +msgstr "Файл не найден: %s" + +#: fread.c:1425 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "Файл открыт, но не могу узнать его размер: %s" + +#: fread.c:1428 fread.c:1460 +#, c-format +msgid "File is empty: %s" +msgstr "Файл пуст: %s" + +#: fread.c:1429 fread.c:1461 +#, c-format +msgid " File opened, size = %s.\n" +msgstr " Файл открыт, размер = %s.\n" + +#: fread.c:1456 +#, c-format +msgid "Unable to open file after %d attempts (error %lu): %s" +msgstr "Не могу открыть файл после %d попыток (ошибка %lu): %s" + +#: fread.c:1458 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "не получилось сделать GetFileSizeEx (функция вернула 0) для файла: %s" + +#: fread.c:1463 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %lu for file %s" +msgstr "Это Windows; CreateFileMapping вернула ошибку %lu для файла %s" + +#: fread.c:1470 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "" +"Файл %s открыт, но не удалось отобразить его в память. Это %d-битный " +"процесс. %s." + +#: fread.c:1471 +msgid "Please upgrade to 64bit" +msgstr "Нужно 64-битное адресное пространство" + +#: fread.c:1471 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "Вероятно, не хватает непрерывной виртуальной памяти" + +#: fread.c:1474 +msgid " Memory mapped ok\n" +msgstr " Файл отображён в адресное пространство\n" + +#: fread.c:1493 +msgid "[03] Detect and skip BOM\n" +msgstr "[03] Обнаружение и пропуск метки порядка байт\n" + +#: fread.c:1497 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "" +" Метка порядка байтов UTF-8 EF BB BF найдена в начале файла и пропущена.\n" + +#: fread.c:1502 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "" +"Обнаружена кодировка GB-18030, но fread() не может ее декодировать. " +"Некоторые строки могут быть искажены.\n" + +#: fread.c:1505 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "" +"Файл закодирован в UTF-16, но fread() не поддерживает эту кодировку. " +"Пожалуйста, перекодируйте файл в UTF-8." + +#: fread.c:1510 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr " На конце файла нашлось %s и было удалено.\n" + +#: fread.c:1513 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "Файл пуст или содержит только BOM или управляющие символы терминала" + +#: fread.c:1520 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "[04] Готовлю \\0 после отображённого в память файла\n" + +#: fread.c:1527 +msgid "" +" No \\n exists in the file at all, so single \\r (if any) will be taken as " +"one line ending. This is unusual but will happen normally when there is no " +"\\r either; e.g. a single line missing its end of line.\n" +msgstr "" +" В файле вообще нет \\n, поэтому одиночный \\r (если он есть) будет " +"воспринят как конец одной строки. Это необычно, но может произойти, когда " +"\\r тоже нет; например, файл из одной строки, не завершённой маркером конца " +"строки.\n" + +#: fread.c:1528 +msgid "" +" \\n has been found in the input and different lines can end with different " +"line endings (e.g. mixed \\n and \\r\\n in one file). This is common and " +"ideal.\n" +msgstr "" +" \\n был найден во входных данных, и разные строки могут заканчиваться " +"разными маркерами (например, смесь \\n и \\r\\n в одном файле). Это " +"нормально.\n" + +#: fread.c:1552 +#, c-format +msgid "" +" File ends abruptly with '%c'. Final end-of-line is missing. Using cow page " +"to write 0 to the last byte.\n" +msgstr "" +" Файл внезапно заканчивается '%c', без маркера конца строки. Записываю 0 в " +"последний байт в виртуальной памяти.\n" + +#: fread.c:1558 +msgid "" +"This file is very unusual: it ends abruptly without a final newline, and " +"also its size is a multiple of 4096 bytes. Please properly end the last row " +"with a newline using for example 'echo >> file'" +msgstr "" +"Очень необычный файл: заканчивается без маркера конца строки, а размер " +"кратен 4096 байтам. Пожалуйста, добавьте маркер конца строки, используя, " +"например, 'echo >> file'" + +#: fread.c:1560 +#, c-format +msgid "" +" File ends abruptly with '%c'. Final end-of-line is missing. Copying file " +"in RAM. %s.\n" +msgstr "" +" Файл оканчивается '%c' без маркера конца строки. Копирую файл в " +"оперативную память. %s.\n" + +#: fread.c:1567 fread.c:1851 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM." +msgstr "Не могу выделить %s непрерывной виртуальной памяти." + +#: fread.c:1571 fread.c:1855 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr " Копирование файла в оперативную память заняло %.3f с.\n" + +#: fread.c:1573 fread.c:1857 +#, c-format +msgid "Avoidable file copy in RAM took %.3f seconds. %s.\n" +msgstr "" +"Копирование файла в оперативную память, которого можно было избежать, заняло " +"%.3f с. %s.\n" + +#: fread.c:1605 +msgid "[05] Skipping initial rows if needed\n" +msgstr "[05] При необходимости пропускаю начальные строки\n" + +#: fread.c:1611 +#, c-format +msgid "" +"skip='%s' not found in input (it is case sensitive and literal; i.e., no " +"patterns, wildcards or regex)" +msgstr "" +"skip='%s' не найдено в файле (интерпретирую строку буквально, чувствительно " +"к регистру: никаких шаблонов, масок или регулярных выражений)" + +#: fread.c:1617 +#, c-format +msgid "" +"Found skip='%s' on line %. Taking this to be header row or first row " +"of data.\n" +msgstr "" +"skip='%s' нашлось в строке %. Считаю, что это строка заголовка или " +"первая строка данных.\n" + +#: fread.c:1631 +#, c-format +msgid " Skipped to line % in the file" +msgstr " Переход к строке % в файле" + +#: fread.c:1645 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "" +"Либо файл пустой, либо состоит из пробельных символов, либо skip задан после " +"последнего не-пробельного символа." + +#: fread.c:1647 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr " Спускаюсь на первую непустую строку (%d)\n" + +#: fread.c:1648 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr " Располагаюсь на строке %d, которая начинается на «%s»\n" + +#: fread.c:1670 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "[06] Определяю разделитель, кавычки и количество столбцов\n" + +#: fread.c:1674 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr " sep='\\n': считываю строки в один строковой столбец\n" + +#: fread.c:1693 +msgid " Detecting sep automatically ...\n" +msgstr " Автоматически определяю разделитель...\n" + +#: fread.c:1700 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr " Использую переданный разделитель '%s'\n" + +#: fread.c:1734 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr " с %d полями и режимом кавычек %d\n" + +#: fread.c:1784 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr " с %d строками по %d полей и режимом кавычек %d\n" + +#: fread.c:1791 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr "" +" Ни с одним разделителем и режимом кавычек удалось найти блок в 2*2 ячейки " +"или больше. Считываю один столбец.\n" + +#: fread.c:1807 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "" +"Одноколоночный ввод содержит неправильные кавычки. Могу попытаться исправить " +"только при ncol>1" + +#: fread.c:1812 +#, c-format +msgid "" +"Found and resolved improper quoting in first %d rows. If the fields are not " +"quoted (e.g. field separator does not appear within any field), try " +"quote=\"\" to avoid this warning." +msgstr "" +"В первых %d строках найдены и исправлены неправильные кавычки. Если кавычек " +"на самом деле не было (например, потому что разделитель не встречается " +"внутри полей), попробуйте quote=\"\", чтобы избежать этого предупреждения." + +#: fread.c:1833 +#, c-format +msgid "" +" Detected %d columns on line %d. This line is either column names or first " +"data row. Line starts as: <<%s>>\n" +msgstr "" +" Обнаружено %d столбцов в строке %d. В этой строке находятся либо имена " +"столбцов, либо первая строка данных. Начало строки: «%s»\n" + +#: fread.c:1835 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr " Выбран режим кавычек = %d\n" + +#: fread.c:1836 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr " fill=%s; наибольшее количество найденных столбцов равно %d\n" + +#: fread.c:1842 +msgid "" +"This file is very unusual: it's one single column, ends with 2 or more end-" +"of-line (representing several NA at the end), and the file size is a " +"multiple of 4096, too" +msgstr "" +"Этот файл очень необычен: он состоит из одного столбца, заканчивается 2 или " +"более маркерами конца строки (что значит несколько NA в конце), а размер " +"файла кратен 4096" + +#: fread.c:1844 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr " Копирую файл в оперативную память. %s\n" + +#: fread.c:1861 +msgid "" +" 1-column file ends with 2 or more end-of-line. Restoring last eol using " +"extra byte in cow page.\n" +msgstr "" +" Файл из 1 столбца заканчивается 2 или более маркерами конца строки. " +"Восстанавливаю последний маркер с использованием лишнего байта в виртуальной " +"памяти.\n" + +#: fread.c:1880 +msgid "" +"[07] Detect column types, dec, good nrow estimate and whether first row is " +"column names\n" +msgstr "" +"[07] Определяю тип столбца, десятичный разделитель, оценку количества строк, " +"а также определяю, содержит ли первая строка имена столбцов\n" + +#: fread.c:1881 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr " 'header' изменён пользователем с 'auto' на %s\n" + +#: fread.c:1887 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "Не удалось выделить 2 * %d байт для 'type' и 'tmpType': %s" + +#: fread.c:1892 +msgid " sep=',' so dec set to '.'\n" +msgstr " sep=',' так что считаю dec='.'\n" + +#: fread.c:1917 +#, c-format +msgid "" +" Number of sampling jump points = %d because nrow limit (%) " +"supplied\n" +msgstr "" +" Количество точек отбора = %d, потому что передано ограничение на " +"количество строк (%)\n" + +#: fread.c:1919 +#, c-format +msgid " Number of sampling jump points = %d because jump0size==0\n" +msgstr " Количество точек отбора = %d, потому что jump0size==0\n" + +#: fread.c:1921 +#, c-format +msgid "" +" Number of sampling jump points = %d because (% bytes from row 1 to " +"eof) / (2 * % jump0size) == %\n" +msgstr "" +" Количество точек отбора = %d, потому что (% байт от первой строки " +"до конца файла) / (2 * % jump0size) == %\n" + +#: fread.c:1962 +#, c-format +msgid "" +" A line with too-few fields (%d/%d) was found on line %d of sample jump %d. " +"%s\n" +msgstr "" +" Недостаточное количество полей (%d/%d) найдено на строке №%d точки отбора №" +"%d. %s\n" + +#: fread.c:1963 +#, c-format +msgid "" +" A line with too-many fields (%d/%d) was found on line %d of sample jump " +"%d. %s\n" +msgstr "" +" Слишком большое количество полей (%d/%d) найдено на строке №%d точки " +"отбора №%d. %s\n" + +#: fread.c:1964 +msgid "" +"Most likely this jump landed awkwardly so type bumps here will be skipped." +msgstr "" +"Вероятно, нам не повезло с точкой отбора, так что мы не будем менять оценки " +"типов данных." + +#: fread.c:1987 fread.c:2013 +#, c-format +msgid " dec='%c' detected based on a balance of %d parsed fields\n" +msgstr " считаю dec='%c' на основании %d рассмотренных полей\n" + +#: fread.c:1997 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr " Коды типов (отбор %03d) : %s Режим кавычек %d\n" + +#: fread.c:2019 +#, c-format +msgid "" +" 'header' determined to be true due to column %d containing a string on row " +"1 and a lower type (%s) in the rest of the % sample rows\n" +msgstr "" +" считаю 'header'=TRUE, поскольку столбец %d содержит текст в первой строке " +"и более низкий тип (%s) в остальных % строках выборки\n" + +#: fread.c:2033 +#, c-format +msgid "" +"Types in 1st data row match types in 2nd data row but previous row has %d " +"fields. Taking previous row as column names." +msgstr "" +"Типы 1-й строки данных совпадают с типами 2-й строки данных, но первая " +"строка содержит %d полей. Считаю её содержащей имена столбцов." + +#: fread.c:2037 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns (i.e. invalid file). " +"Added an extra default column name for the first column which is guessed to " +"be row names or an index. Use setnames() afterwards if this guess is not " +"correct, or fix the file write command that created the file to create a " +"valid file.\n" +msgstr "" +"Обнаружено %d имен столбцов, но данные содержат %d столбцов (т. е. " +"некорректный файл). Добавляю ещё одно имя для первого столбца, который " +"предположительно содержит имена строк или индекс. Если это неверно, " +"используйте setnames(), чтобы исправить имена, либо исправьте сам файл.\n" + +#: fread.c:2040 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns (i.e. invalid file). " +"Added %d extra default column names at the end.\n" +msgstr "" +"Обнаружено %d имен столбцов, но данные содержат %d столбцов (т. е. " +"некорректный файл). Добавляю в конце %d имён столбцов.\n" + +#: fread.c:2044 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns. Filling rows " +"automatically. Set fill=TRUE explicitly to avoid this warning.\n" +msgstr "" +"Обнаружено %d имен столбцов, но данные содержат %d столбцов. Автоматически " +"заполняю строки. Чтобы избежать этого предупреждения, явно задайте " +"fill=TRUE.\n" + +#: fread.c:2048 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "" +"Не удалось изменить размер выделенной памяти до 2 * %d байт для 'type' и " +"'tmpType': %s" + +#: fread.c:2069 +msgid "" +" 'header' determined to be TRUE because there are no number fields in the " +"first and only row\n" +msgstr "" +" считаю 'header'=TRUE, потому что не нашлось столбцов с числами в первой и " +"единственной строке\n" + +#: fread.c:2071 +msgid "" +" 'header' determined to be FALSE because there are number fields in the " +"first and only row\n" +msgstr "" +" считаю 'header'=FALSE, потому что нашлось несколько столбцов с числами в " +"первой строке\n" + +#: fread.c:2074 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "" +" считаю 'header'=TRUE, потому что все столбцы содержат текст и более точное " +"предположение невозможно\n" + +#: fread.c:2076 +msgid "" +" 'header' determined to be false because there are some number columns and " +"those columns do not have a string field at the top of them\n" +msgstr "" +" считаю 'header'=FALSE, потому что есть несколько столбцов с числами и в " +"верхней части этих столбцов нет строки-заголовка\n" + +#: fread.c:2092 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr " Коды типов (первая строка) : %s Режим кавычек %d\n" + +#: fread.c:2101 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=% " +"exactly\n" +msgstr "" +" Рассмотрены все строки, поскольку файл очень мал и мы точно знаем " +"nrow=%\n" + +#: fread.c:2114 +#, c-format +msgid "" +" Sampled % rows (handled \\n inside quoted fields) at %d jump " +"points\n" +msgstr "" +" Рассмотрено % строк (с учётом \\n внутри полей с кавычками) в %d " +"точках выборки\n" + +#: fread.c:2115 +#, c-format +msgid "" +" Bytes from first data row on line %d to the end of last row: %\n" +msgstr "" +" Байт от начала данных на строке %d до конца последней строки: %\n" + +#: fread.c:2116 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "" +" Длины строк: средняя=%.2f стандартное отклонение=%.2f минимум=%d " +"максимум=%d\n" + +#: fread.c:2117 +#, c-format +msgid " Estimated number of rows: % / %.2f = %\n" +msgstr " Оценка числа строк: % / %.2f = %\n" + +#: fread.c:2118 +#, c-format +msgid "" +" Initial alloc = % rows (% + %d%%) using bytes/" +"max(mean-2*sd,min) clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" +" Начальное выделение памяти = % строк (% + %d%%), используя " +"байт/max(среднее-2*σ, min) с ограничением между [1.1*оценка, 2.0*оценка]\n" + +#: fread.c:2126 +#, c-format +msgid " Alloc limited to lower nrows=% passed in.\n" +msgstr " Выделение памяти ограничено переданным nrows=%.\n" + +#: fread.c:2138 +msgid "[08] Assign column names\n" +msgstr "[08] Назначаю имена столбцов\n" + +#: fread.c:2147 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "Не удалось выделить %d*%d байт для указателей имен столбцов: %s" + +#: fread.c:2187 +msgid "[09] Apply user overrides on column types\n" +msgstr "[09] Применяю пользовательские переопределения для типов столбцов\n" + +#: fread.c:2191 +msgid " Cancelled by user: userOverride() returned false." +msgstr " Отменено пользователем: userOverride() вернула false." + +#: fread.c:2202 +#, c-format +msgid "Failed to allocate %d bytes for '%s': %s" +msgstr "Не удалось выделить %d байт для '%s': %s" + +#: fread.c:2209 +#, c-format +msgid "" +"Attempt to override column %d%s%.*s%s of inherent type '%s' down to '%s' " +"ignored. Only overrides to a higher type are currently supported. If this " +"was intended, please coerce to the lower type afterwards." +msgstr "" +"Игнорирую попытку переопределить столбец %d%s%.*s%s естественного типа '%s' " +"до '%s'. В настоящее время поддерживаются только переопределения к более " +"высокому типу. Если Вы и правда этого хотите, приведите столбец к желаемому " +"типу потом." + +#: fread.c:2224 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr " После %d назначенных типов и %d пропущенных столбцов: %s\n" + +#: fread.c:2232 +msgid "[10] Allocate memory for the datatable\n" +msgstr "[10] Выделяю память под data.table\n" + +#: fread.c:2233 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with % rows\n" +msgstr "" +" Выделяю %d слотов столбцов (%d - %d пропущено) с % строками\n" + +#: fread.c:2288 +#, c-format +msgid "Buffer size % is too large\n" +msgstr "Размер буфера % слишком велик\n" + +#: fread.c:2291 +msgid "[11] Read the data\n" +msgstr "[11] Читаю данные\n" + +#: fread.c:2520 +#, c-format +msgid "" +"Column %d%s%.*s%s bumped from '%s' to '%s' due to <<%.*s>> on row %\n" +msgstr "" +"Меняю тип столбца %d%s%.*s%s с '%s' на '%s' из-за <<%.*s>> на строке " +"%\n" + +#: fread.c:2638 +#, c-format +msgid " Provided number of fill columns: %d but only found %d\n" +msgstr " Указано столбцов: %d, но найдено только %d\n" + +#: fread.c:2639 +#, c-format +msgid " Dropping %d overallocated columns\n" +msgstr " Выбрасываю %d лишних столбцов\n" + +#: fread.c:2657 +#, c-format +msgid "" +"Internal error in %s: %s. Please report to the data.table issues tracker" +msgstr "" +"Внутренняя ошибка в %s: %s. Пожалуйста, сообщите в трекер ошибок data.table" + +#: fread.c:2664 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional % rows (now " +"nrows=%) and continue reading from jump %d\n" +msgstr "" +" Выделено памяти под слишком мало строк. Выделяю ещё % строк " +"(теперь nrows=%) и продолжаю читать с точки перехода №%d\n" + +#: fread.c:2671 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr " Перезапускаю потоки с точки перехода №%d. nSwept==%d quoteRule==%d\n" + +#: fread.c:2691 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr " %d раз изменены типы после начальной оценки: %s\n" + +#: fread.c:2726 +#, c-format +msgid "" +"Read % rows x %d columns from %s file in %02d:%06.3f wall clock " +"time\n" +msgstr "" +"Чтение % строк * %d столбцов из файла %s заняло %02d:%06.3f по " +"часам\n" + +#: fread.c:2733 +msgid "[12] Finalizing the datatable\n" +msgstr "[12] Завершающие штрихи\n" + +#: fread.c:2734 +msgid " Type counts:\n" +msgstr " Количества типов:\n" + +#: fread.c:2736 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "%10d : %-9s '%c'\n" + +#: fread.c:2752 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "Пропущена завершающая строка после данных: <<%s>>" + +#: fread.c:2758 +#, c-format +msgid "" +"Stopped early on line %. Expected %d fields but found %d. Consider " +"fill=%d or even more based on your knowledge of the input file. Use fill=Inf " +"for reading the whole file for detecting the number of fields. First " +"discarded non-empty line: <<%s>>" +msgstr "" +"Ранняя остановка на строке %. Ожидалось %d полей, а найдено %d. " +"Попробуйте задать fill=%d или больше, исходя из Ваших знаний о входном " +"файле. Используйте fill=Inf, чтобы считать весь файл для определения " +"количества полей. Первая отброшенная непустая строка: <<%s>>" + +#: fread.c:2761 +#, c-format +msgid "" +"Stopped early on line %. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" +"Ранняя остановка на строке %. Ожидалось %d полей, а найдено %d. " +"Попробуйте fill=TRUE и comment.char=. Первая отброшенная непустая строка: " +"<<%s>>" + +#: fread.c:2768 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line " +"%: <<%s>>. If the fields are not quoted (e.g. field separator does " +"not appear within any field), try quote=\"\" to avoid this warning." +msgstr "" +"Найдены и исправлены неправильные кавычки вне первичной выборки. Первая " +"исправленная строка %: <<%s>>. Если поля не заключены в кавычки " +"(например, разделитель полей не появляется ни в одном из полей), попробуйте " +"использовать quote=\"\", чтобы избежать этого предупреждения." + +#: fread.c:2774 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "" +"%8.3f с (%3.0f%%) Отображение файла размером %.3f ГБ в виртуальную память\n" + +#: fread.c:2775 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "%8.3f с (%3.0f%%) sep=" + +#: fread.c:2777 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr " ncol=%d и определение заголовка\n" + +#: fread.c:2778 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using % sample rows\n" +msgstr "" +"%8.3f с (%3.0f%%) Определение типов столбцов по выборке из % строк\n" + +#: fread.c:2780 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of % rows x %d cols (%.3fGB) of which " +"% (%3.0f%%) rows used\n" +msgstr "" +"%8.3f с (%3.0f%%) Выделение памяти под % строк * %d столбцов (%.3f " +"ГБ), из которых использовано % (%3.0f%%) строк\n" + +#: fread.c:2784 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) " +"using %d threads\n" +msgstr "" +"%8.3f с (%3.0f%%) Чтение %d частей (%d перемотано) размером %.3f МБ (по %d " +"строк) с использованием %d потоков\n" + +#: fread.c:2786 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr "" +" + %8.3f с (%3.0f%%) Анализ в построчных буферах потоков (наращены %d " +"раз)\n" + +#: fread.c:2787 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr " + %8.3f с (%3.0f%%) Транспонирование\n" + +#: fread.c:2788 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr " + %8.3f с (%3.0f%%) Ожидание\n" + +#: fread.c:2789 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "" +"%8.3f с (%3.0f%%) Перечитывание %d столбцов из-за неожиданной смены типа\n" + +#: fread.c:2791 +#, c-format +msgid "%8.3fs Total\n" +msgstr "%8.3f с Итого\n" + +#: freadR.c:94 +#, c-format +msgid "freadR.c has been passed a filename: %s\n" +msgstr "freadR.c передано имя файла: %s\n" + +#: freadR.c:98 +msgid "freadR.c has been passed the data as text input (not a filename)\n" +msgstr "freadR.c переданы данные в виде текста (без имени файла)\n" + +#: freadR.c:116 +msgid "quote= must be a single character, blank \"\", or FALSE" +msgstr "quote= должен быть одиночным символом, пустым \"\" или FALSE" + +#: freadR.c:170 +msgid "'integer64' must be a single character string" +msgstr "'integer64' должен быть одиночной строкой" + +#: freadR.c:178 +#, c-format +msgid "" +"Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or " +"'numeric'" +msgstr "" +"Недопустимое значение integer64='%s'. Должно быть 'integer64', 'character', " +"'double' или 'numeric'" + +#: freadR.c:186 +msgid "Use either select= or drop= but not both." +msgstr "Используйте либо select=, либо drop=, но не оба одновременно." + +#: freadR.c:189 +msgid "" +"select= is type list for specifying types in select=, but colClasses= has " +"been provided as well. Please remove colClasses=." +msgstr "" +"select= содержит типы столбцов, но также был предоставлен colClasses=. " +"Пожалуйста, удалите colClasses=." + +#: freadR.c:191 +msgid "" +"select= is type list but has no names; expecting list(type1=cols1, " +"type2=cols2, ...)" +msgstr "" +"select= передан в виде списка, но не содержит имён столбцов; должен быть в " +"виде list(тип1=столбцы1, тип2=столбцы2, ...)" + +#: freadR.c:198 +msgid "" +"select= is a named vector specifying the columns to select and their types, " +"but colClasses= has been provided as well. Please remove colClasses=." +msgstr "" +"select= передан в виде списка с именами и типами столбцов, но также передан " +"colClasses. Пожалуйста, удалите colClasses=." + +#: freadR.c:206 freadR.c:372 +msgid "colClasses is type list but has no names" +msgstr "в списке colClasses нет имён" + +#: freadR.c:216 +#, c-format +msgid "encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'" +msgstr "" +"Неправильная encoding='%s'. Должно быть 'unknown', 'Latin-1' или 'UTF-8'" + +#: freadR.c:239 +#, c-format +msgid "Column name '%s' (%s) not found" +msgstr "Имя столбца '%s' (%s) не найдено" + +#: freadR.c:241 +#, c-format +msgid "%s is NA" +msgstr "%s является NA" + +#: freadR.c:243 +#, c-format +msgid "%s is %d which is out of range [1,ncol=%d]" +msgstr "%s равно %d, что выходит за пределы диапазона [1,ncol=%d]" + +#: freadR.c:292 +#, c-format +msgid "" +"Column name '%s' not found in column name header (case sensitive), skipping." +msgstr "" +"Имя столбца '%s' не найдено в заголовке с именами столбцов (с учетом " +"регистра), пропускаю." + +#: freadR.c:302 +#, c-format +msgid "" +"Column number %d (select[%d]) is negative but should be in the range [1," +"ncol=%d]. Consider drop= for column exclusion." +msgstr "" +"Номер столбца %d (select[%d]) отрицательный, но должен быть в диапазоне [1," +"ncol=%d]. Чтобы исключить столбцы, используйте drop=." + +#: freadR.c:303 +#, c-format +msgid "" +"select = 0 (select[%d]) has no meaning. All values of select should be in " +"the range [1,ncol=%d]." +msgstr "" +"select[%d] = 0 не имеет смысла. Все значения select должны находиться в " +"диапазоне [1,ncol=%d]." + +#: freadR.c:304 +#, c-format +msgid "" +"Column number %d (select[%d]) is too large for this table, which only has %d " +"columns." +msgstr "" +"Номер столбца %d (select[%d]) слишком велик для этой таблицы, в которой " +"всего %d столбцов." + +#: freadR.c:305 +#, c-format +msgid "Column number %d ('%s') has been selected twice by select=" +msgstr "Номер столбца %d ('%s') был выбран дважды с помощью select=" + +#: freadR.c:328 +#, c-format +msgid "" +"colClasses= is an unnamed vector of types, length %d, but there are %d " +"columns in the input. To specify types for a subset of columns, you can use " +"a named vector, list format, or specify types using select= instead of " +"colClasses=. Please see examples in ?fread." +msgstr "" +"В colClasses= передан неименованный вектор типов длиной %d, но во входных " +"данных имеется %d столбцов. Чтобы указать типы для подмножества столбцов, " +"передайте именованный вектор или список, либо используйте select= вместо " +"colClasses=. См. примеры в ?fread." + +#: freadR.c:370 +#, c-format +msgid "colClasses is type '%s' but should be list or character" +msgstr "" +"colClasses имеет тип '%s', но должен быть списком или строковым вектором" + +#: freadR.c:394 +#, c-format +msgid "Column name '%s' (colClasses[[%d]][%d]) not found" +msgstr "Имя столбца '%s' (colClasses[[%d]][%d]) не найдено" + +#: freadR.c:396 +#, c-format +msgid "colClasses[[%d]][%d] is NA" +msgstr "colClasses[[%d]][%d] является NA" + +#: freadR.c:400 +#, c-format +msgid "Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]" +msgstr "" +"Номер столбца %d (colClasses[[%d]][%d]) находится вне диапазона [1,ncol=%d]" + +#: freadR.c:404 +#, c-format +msgid "" +"Column %d ('%s') appears more than once in colClasses. The second time is " +"colClasses[[%d]][%d]." +msgstr "" +"Столбец %d ('%s') встречается в colClasses более одного раза. Второй раз - " +"colClasses[[%d]][%d]." + +#: freadR.c:646 +#, c-format +msgid "Field size is 1 but the field is of type %d\n" +msgstr "Размер поля равен 1, но поле имеет тип %d\n" + +#: froll.c:23 froll.c:232 froll.c:416 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "%s: ширина окна больше входного вектора, возвращаю вектор из NA\n" + +#: froll.c:41 froll.c:249 froll.c:465 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "%s: выравнивание %d, смещение ответа на %d\n" + +#: froll.c:48 froll.c:256 frolladaptive.c:19 frolladaptive.c:214 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "%s: обработка алгоритмом %u заняла %.3f с\n" + +#: froll.c:57 froll.c:260 +#, c-format +msgid "%s: running for input length %, window %d, hasna %d, narm %d\n" +msgstr "" +"%s: работаю для входных данных длины %, ширина окна %d, hasna=%d, " +"narm=%d\n" + +#: froll.c:77 froll.c:87 froll.c:178 froll.c:280 froll.c:290 froll.c:371 +#: frolladaptive.c:58 frolladaptive.c:147 frolladaptive.c:247 +#: frolladaptive.c:326 +#, c-format +msgid "" +"%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in " +"input, use default hasNA=NA to avoid this warning" +msgstr "" +"%s: передано hasNA=FALSE, но во входных данных присутствуют NA (или другие " +"не-конечные значения). Используйте значение по умолчанию hasNA=NA, чтобы " +"избежать этого предупреждения" + +#: froll.c:80 froll.c:182 froll.c:283 froll.c:375 frolladaptive.c:61 +#: frolladaptive.c:151 frolladaptive.c:250 frolladaptive.c:330 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "" +"%s: во входных данных найдены NA (или другие не-конечные) значения; запускаю " +"ещё раз в более осторожном режиме\n" + +#: froll.c:90 froll.c:293 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, skip non-NA " +"attempt and run with extra care for NAs\n" +msgstr "" +"%s: во входных данных присутствует NA (или другие не-конечные значения), " +"пропускаю попытку работать без NA и сразу перехожу в осторожный режим\n" + +#: froll.c:146 froll.c:344 +#, c-format +msgid "" +"%s: running in parallel for input length %, window %d, hasna %d, " +"narm %d\n" +msgstr "" +"%s: работаю параллельно для входных данных длины %, ширина окна %d, " +"hasna=%d, narm=%d\n" + +#: froll.c:184 froll.c:377 frolladaptive.c:153 frolladaptive.c:332 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE " +"so in 'exact' implementation NAs were handled already, no need to re-run\n" +msgstr "" +"%s: на входе присутствует NA (или другие не-конечные значения), na.rm был " +"FALSE, поэтому \"точная\" реализация уже обработала NA, перезапуск не нужен\n" + +#: froll.c:433 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "%s: возвращаемое значение из данной FUN не длины 1" + +#: froll.c:440 +#, c-format +msgid "" +"%s: results from provided FUN are not of type double, coercion from integer " +"or logical will be applied on each iteration\n" +msgstr "" +"%s: возвращаемое данной FUN значение не типа double; на каждой итерации буду " +"выполнять приведение типов из целочисленного или логического\n" + +#: froll.c:443 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "%s: возвращаемое данной FUN значение не типа double" + +#: froll.c:472 nafill.c:87 +#, c-format +msgid "%s: took %.3fs\n" +msgstr "%s: заняло %.3f с\n" + +#: frollR.c:17 +msgid "" +"x must be of type numeric or logical, or a list, data.frame or data.table of " +"such" +msgstr "" +"x должен иметь численным, логическим, списком, либо data.frame или data." +"table, состоящей из столбцов таких типов" + +#: frollR.c:38 frollR.c:244 +msgid "n must be non 0 length" +msgstr "n должно быть ненулевой длины" + +#: frollR.c:49 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "n должно быть целочисленным; для adaptive=TRUE также допустим список n" + +#: frollR.c:56 frollR.c:236 frollR.c:239 +msgid "n must be integer" +msgstr "n должно быть целочисленным" + +#: frollR.c:63 +msgid "n must be positive integer values (> 0)" +msgstr "n должно быть целочисленным и положительным (> 0)" + +#: frollR.c:72 frollR.c:84 +msgid "n must be integer vector or list of integer vectors" +msgstr "" +"n должен быть целочисленным вектором или списком целочисленных векторов" + +#: frollR.c:98 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "hasNA должно быть TRUE, FALSE или NA" + +#: frollR.c:100 +msgid "" +"using hasNA FALSE and na.rm TRUE does not make sense, if you know there are " +"NA values use hasNA TRUE, otherwise leave it as default NA" +msgstr "" +"Использование вместе hasNA=FALSE и na.rm=TRUE не имеет смысла; если Вы " +"знаете, что есть значения NA, используйте hasNA=TRUE, в противном случае " +"оставьте по умолчанию hasNA=NA" + +#: frollR.c:113 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "Сочетание adaptive=TRUE и align!='right' пока не реализовано" + +#: frollR.c:117 frollR.c:267 types.c:71 +#, c-format +msgid "%s: allocating memory for results %dx%d\n" +msgstr "%s: выделяю память для результатов %d*%d\n" + +#: frollR.c:126 +msgid "" +"adaptive rolling function can only process 'x' having equal length of " +"elements, like data.table or data.frame; If you want to call rolling " +"function on list having variable length of elements call it for each field " +"separately" +msgstr "" +"адаптивная скользящая функция может обрабатывать только 'x' с одинаковой " +"длиной элементов, как в data.table или data.frame; если Вы хотите вызвать " +"скользящую функцию для списка с переменной длиной элементов, вызывайте ее " +"для каждого элемента отдельно" + +#: frollR.c:128 +msgid "" +"length of integer vector(s) provided as list to 'n' argument must be equal " +"to number of observations provided in 'x'" +msgstr "" +"Длина целочисленного(ых) вектора(ов), переданного(ых) в виде списка 'n', " +"должна быть равна количеству наблюдений, переданных в 'x'" + +#: frollR.c:146 frollR.c:259 gsumm.c:1203 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "'fill' должен быть вектором длины 1" + +#: frollR.c:148 frollR.c:261 +msgid "fill must be numeric or logical" +msgstr "'fill' должен быть численным или логическим" + +#: frollR.c:178 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), if product > 1 then entering parallel " +"execution\n" +msgstr "" +"%s: %d столбец(ов) и %d окно(он); если их произведение > 1, то выполняю " +"параллельно\n" + +#: frollR.c:180 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), not entering parallel execution here " +"because algo='exact' will compute results in parallel\n" +msgstr "" +"%s: %d столбец(ов) и %d окно(он); здесь не выполняю параллельно, поскольку " +"этим займётся algo='exact'\n" + +#: frollR.c:207 frollR.c:299 +#, c-format +msgid "%s: processing of %d column(s) and %d window(s) took %.3fs\n" +msgstr "%s: обработка %d столбца(ов) и %d окна(он) заняла %.3f с\n" + +#: frolladaptive.c:29 frolladaptive.c:218 +#, c-format +msgid "%s: running for input length %, hasna %d, narm %d\n" +msgstr "%s: входные данные длиной %, hasna=%d, narm=%d\n" + +#: frolladaptive.c:35 frolladaptive.c:224 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "%s: Не удалось выделить память для накапливаемой суммы" + +#: frolladaptive.c:71 frolladaptive.c:260 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "%s: Не удалось выделить память для кумулятивного счётчика NA" + +#: frolladaptive.c:114 frolladaptive.c:298 +#, c-format +msgid "%s: running in parallel for input length %, hasna %d, narm %d\n" +msgstr "" +"%s: работаю параллельно для входных данных длиной %, hasna %d, narm " +"%d\n" + +#: fsort.c:106 +msgid "Reduced MSBsize from %zu to %zu by excluding 0 and 1 counts\n" +msgstr "" +"MSBsize уменьшен с %zu до %zu путём исключения счетов, равных 0 или 1\n" + +#: fsort.c:121 +msgid "x must be a vector of type double currently" +msgstr "в текущей версии x должен быть вектором типа double" + +#: fsort.c:147 +#, c-format +msgid "Failed to allocate %d bytes in fsort()." +msgstr "Не удалось выделить %d байт в fsort()." + +#: fsort.c:173 +#, c-format +msgid "Range = [%g,%g]\n" +msgstr "Диапазон = [%g,%g]\n" + +#: fsort.c:174 +msgid "Cannot yet handle negatives." +msgstr "Пока не могу справляться с отрицательными числами." + +#: fsort.c:196 +#, c-format +msgid "" +"counts is %dMB (%d pages per nBatch=%d, batchSize=%, " +"lastBatchSize=%)\n" +msgstr "" +"'counts' занимает %d МБ (%d страниц на nBatch=%d, batchSize=%, " +"lastBatchSize=%)\n" + +#: fsort.c:266 +msgid "Top 20 MSB counts: " +msgstr "20 самых часто встречающихся значений самых старших битов: " + +#: fsort.c:266 +#, c-format +msgid "% " +msgstr "% " + +#: fsort.c:333 +#, c-format +msgid "" +"OpenMP %d did not assign threads to iterations monotonically. Please search " +"Stack Overflow for this message." +msgstr "" +"OpenMP %1$d не назначило потоки итерациям монотонным образом. Пожалуйста, " +"найдите «OpenMP %1$d did not assign threads to iterations monotonically» на " +"Stack Overflow." + +#: fsort.c:335 +msgid "Unable to allocate working memory" +msgstr "Не удалось выделить оперативную память" + +#: fsort.c:345 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" +msgstr "%d: %.3f (%4.1f%%)\n" + +#: fwrite.c:625 +msgid "" +"Compression in fwrite uses zlib library. Its header files were not found at " +"the time data.table was compiled. To enable fwrite compression, please " +"reinstall data.table and study the output for further guidance." +msgstr "" +"Сжатие в fwrite использует библиотеку zlib. Ее заголовочные файлы не были " +"найдены во время компиляции data.table. Чтобы включить сжатие в fwrite, " +"переустановите data.table и изучите вывод компиляции для получения " +"дальнейших указаний." + +#: fwrite.c:641 +#, c-format +msgid "" +"eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" +msgstr "" +"'eol' должен быть 1 или более байт (обычно \"\\n\" или \"\\r\\n\"), но его " +"длина составляет %d" + +#: fwrite.c:644 +msgid "Column writers: " +msgstr "Буду записывать столбцы: " + +#: fwrite.c:690 +#, c-format +msgid "type %d has no max length method implemented" +msgstr "для типа %d не реализован метод нахождения максимальной длины" + +#: fwrite.c:702 +#, c-format +msgid "maxLineLen=%. Found in %.3fs\n" +msgstr "maxLineLen=%. Найдено за %.3f с\n" + +#: fwrite.c:721 +#, c-format +msgid "" +"%s: '%s'. Failed to open existing file for writing. Do you have write " +"permission to it? Is this Windows and does another process such as Excel " +"have it open?" +msgstr "" +"%s: '%s'. Не удалось открыть существующий файл для записи. Есть ли у вас " +"разрешение на запись в него? Возможно, это Windows и он открыт другим " +"процессом, например, Excel?" + +#: fwrite.c:722 +#, c-format +msgid "" +"%s: '%s'. Unable to create new file for writing (it does not exist already). " +"Do you have permission to write here, is there space on the disk and does " +"the path exist?" +msgstr "" +"%s: '%s'. Невозможно создать новый файл для записи (он еще не существует). " +"Есть ли у вас разрешение на запись сюда, есть ли место на диске и существует " +"ли путь?" + +#: fwrite.c:730 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s)\n" +msgstr "" +"Записываю маркер порядка байт (%s), YAML (%d символов) и заголовки столбцов " +"(%s)\n" + +#: fwrite.c:782 +#, c-format +msgid "" +"Writing % rows in %d batches of %d rows, each buffer size %zu bytes " +"(%zu MiB), showProgress=%d, nth=%d\n" +msgstr "" +"Запись % строк в %d партиях по %d строк; размер каждого буфера %zu " +"байт (%zu МиБ), showProgress=%d, nth=%d\n" + +#: fwrite.c:790 +msgid "Allocate %zu bytes (%zu MiB) for buffPool\n" +msgstr "Выделяю %zu байт (%zu МиБ) для 'buffPool'\n" + +#: fwrite.c:794 +#, c-format +msgid "" +"Unable to allocate %zu MB * %d thread buffers; '%d: %s'. Please read ?fwrite " +"for nThread, buffMB and verbose options." +msgstr "" +"Невозможно выделить %zu МБ * %d буферов потоков; '%d: %s'. Пожалуйста, " +"прочитайте ?fwrite про параметры nThread, buffMB и verbose." + +#: fwrite.c:810 +msgid "Can't init stream structure for deflateBound" +msgstr "Не удалось инициализировать структуру потока для deflateBound" + +#: fwrite.c:815 +#, c-format +msgid "zbuffSize=%d returned from deflateBound\n" +msgstr "deflateBound вернула zbuffSize=%d\n" + +#: fwrite.c:821 +msgid "Allocate %zu bytes (%zu MiB) for zbuffPool\n" +msgstr "Выделяю %zu байт (%zu МиБ) для zbuffPool\n" + +#: fwrite.c:828 +#, c-format +msgid "" +"Unable to allocate %zu MiB * %d thread compressed buffers; '%d: %s'. Please " +"read ?fwrite for nThread, buffMB and verbose options." +msgstr "" +"Не удалось выделить %zu МиБ * %d буферов сжатых данных потоков; '%d: %s'. " +"Пожалуйста, прочитайте ?fwrite про параметры nThread, buffMB и verbose." + +#: fwrite.c:909 +#, c-format +msgid "Can't write gzip header error: %d" +msgstr "Не удалось записать заголовок gzip: %d" + +#: fwrite.c:910 +#, c-format +msgid "Compress gzip error: %d" +msgstr "Ошибка сжатия gzip: %d" + +#: fwrite.c:911 fwrite.c:928 +#, c-format +msgid "%s: '%s'" +msgstr "%s: '%s'" + +#: fwrite.c:917 +#, c-format +msgid "Initialization done in %.3fs\n" +msgstr "Инициализация выполнена за %.3f с\n" + +#: fwrite.c:922 +msgid "No data rows present (nrow==0)\n" +msgstr "Нет строк с данными (nrow==0)\n" + +#: fwrite.c:1096 +msgid "Failed to write gzip trailer" +msgstr "Не удалось записать концевые данные gzip" + +#: fwrite.c:1115 +#, c-format +msgid "" +"zlib: uncompressed length=%zu (%zu MiB), compressed length=%zu (%zu MiB), " +"ratio=%.1f%%, crc=%x\n" +msgstr "" +"zlib: исходные данные размером %zu Б (%zu МиБ), сжатые – %zu Б (%zu МиБ), " +"коэффициент сжатия=%.1f%%, CRC=%x\n" + +#: fwrite.c:1119 +#, c-format +msgid "" +"Written % rows in %.3f secs using %d thread%s. MaxBuffUsed=%d%%\n" +msgstr "" +"Записано % строк за %.3f с с использованием %d поток(ов)%.0s. " +"MaxBuffUsed=%d%%\n" + +#: fwrite.c:1133 +#, c-format +msgid "" +"zlib %s (zlib.h %s) deflate() returned error %d Z_FINISH=%d Z_BLOCK=%d. %s" +msgstr "" +"zlib %s (zlib.h %s) deflate() вернула ошибку %d с Z_FINISH=%d Z_BLOCK=%d. %s" + +#: fwrite.c:1135 +msgid "" +"Please include the full output above and below this message in your data." +"table bug report." +msgstr "" +"Пожалуйста, включите полный вывод выше и ниже этого сообщения в отчет об " +"ошибке data.table." + +#: fwrite.c:1136 +msgid "" +"Please retry fwrite() with verbose=TRUE and include the full output with " +"your data.table bug report." +msgstr "" +"Пожалуйста, запустите fwrite() ещё раз с verbose=TRUE и приложите полный " +"вывод к сообщению об ошибке в трекере data.table." + +#: fwriteR.c:103 +#, c-format +msgid "" +"Row % of list column is type '%s' - not yet implemented. fwrite() " +"can write list columns containing items which are atomic vectors of type " +"logical, integer, integer64, double, complex and character." +msgstr "" +"Строка % столбца списка имеет тип '%s', что пока не реализовано. " +"fwrite() может записывать столбцы-списки, содержащие элементы, которые " +"являются атомарными векторами: логическими, целочисленными, integer64, с " +"плавающей запятой, комплексными и строковыми." + +#: fwriteR.c:177 +msgid "" +"fwrite must be passed an object of type list; e.g. data.frame, data.table" +msgstr "fwrite принимает объекты-списки, например, data.frame и data.table" + +#: fwriteR.c:188 +msgid "fwrite was passed an empty list of no columns. Nothing to write." +msgstr "fwrite передан пустой список без столбцов. Нечего записывать." + +#: fwriteR.c:242 +#, c-format +msgid "" +"Column %d's length (%d) is not the same as column 1's length (%)" +msgstr "Длина столбца №%d (%d) не совпадает с длиной столбца 1 (%)" + +#: fwriteR.c:246 +#, c-format +msgid "Column %d's type is '%s' - not yet implemented in fwrite." +msgstr "Тип столбца №%d - '%s', еще не реализован в fwrite." + +#: fwriteR.c:269 +#, c-format +msgid "" +"input has specific integer rownames but their length (%lld) != nrow " +"(%)" +msgstr "" +"У входного значения специальный целочисленный атрибут row.names, но его " +"длина (%lld) != количеству строк (%)" + +#: fwriteR.c:284 +msgid "" +"No list columns are present. Setting sep2='' otherwise quote='auto' would " +"quote fields containing sep2.\n" +msgstr "" +"Нет списочных столбцов. Если задать sep2=''; в противном случае quote='auto' " +"приведёт к тому, что поля, содержащие sep2, будут заключены в кавычки.\n" + +#: fwriteR.c:288 +#, c-format +msgid "" +"If quote='auto', fields will be quoted if the field contains either sep " +"('%c') or sep2 ('%c') because column %d is a list column.\n" +msgstr "" +"Если quote='auto', поля, содержащие sep ('%c') или sep2 ('%c'), будут " +"заключены в кавычки, поскольку столбец %d является списком.\n" + +#: fwriteR.c:292 +#, c-format +msgid "" +"sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " +"list column." +msgstr "" +"sep ('%c'), sep2 ('%c') и dec ('%c') должны быть разными. Столбец №%d " +"является списком." + +#: gsumm.c:50 gsumm.c:51 gsumm.c:52 +#, c-format +msgid "%s is not an integer vector" +msgstr "%s не является целочисленным вектором" + +#: gsumm.c:61 +msgid "irowsArg is neither an integer vector nor NULL" +msgstr "irowsArg не является ни целочисленным вектором, ни NULL" + +#: gsumm.c:72 +#, c-format +msgid "o has length %d but sum(l)=%d" +msgstr "'o' длины %d, но sum(l)=%d" + +#: gsumm.c:104 +#, c-format +msgid "gforce initial population of grp took %.3f\n" +msgstr "gforce: начальное заполнение grp заняло %.3f с\n" + +#: gsumm.c:124 +msgid "Failed to allocate counts or TMP when assigning g in gforce" +msgstr "" +"Не удалось выделить память для 'counts' или 'TMP' при назначении g в gforce" + +#: gsumm.c:203 +#, c-format +msgid "gforce assign high and low took %.3f\n" +msgstr "gforce: запись 'high' и 'low' заняла %.3f с\n" + +#: gsumm.c:209 +#, c-format +msgid "gforce eval took %.3f\n" +msgstr "gforce: eval() занял %.3f с\n" + +#: gsumm.c:342 +#, c-format +msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" +msgstr "gather() работает для INTSXP, REALSXP, CPLXSXP, но не '%s'" + +#: gsumm.c:344 +#, c-format +msgid "gather took %.3fs\n" +msgstr "gather() заняло %.3f с\n" + +#: gsumm.c:354 gsumm.c:585 gsumm.c:736 gsumm.c:873 gsumm.c:1028 gsumm.c:1122 +#, c-format +msgid "%s is not meaningful for factors." +msgstr "%s не имеет смысла для факторов." + +#: gsumm.c:358 +#, c-format +msgid "This gsum (narm=%s) took ... " +msgstr "Вызов gsum(narm=%s) занимает ... " + +#: gsumm.c:359 gsumm.c:593 gsumm.c:741 gsumm.c:876 gsumm.c:928 gsumm.c:1030 +#: gsumm.c:1126 +#, c-format +msgid "nrow [%d] != length(x) [%d] in %s" +msgstr "nrow [%d] != length(x) [%d] в %s" + +#: gsumm.c:413 +msgid "" +"The sum of an integer column for a group was more than type 'integer' can " +"hold so the result has been coerced to 'numeric' automatically for " +"convenience." +msgstr "" +"Групповая сумма для целочисленного столбца оказалась больше, чем может " +"вместить тип 'integer', поэтому результат был автоматически приведен к " +"'numeric'." + +#: gsumm.c:574 gsumm.c:848 gsumm.c:914 gsumm.c:1099 gsumm.c:1171 +#, c-format +msgid "" +"Type '%s' is not supported by GForce %s. Either add the prefix %s or turn " +"off GForce optimization using options(datatable.optimize=1)" +msgstr "" +"Тип '%s' не поддерживается GForce %s. Либо добавьте префикс %s, либо " +"отключите оптимизацию GForce при помощи options(datatable.optimize=1)" + +#: gsumm.c:577 gsumm.c:725 +#, c-format +msgid "%.3fs\n" +msgstr "%.3f с\n" + +#: gsumm.c:592 +#, c-format +msgid "This gmean took (narm=%s) ... " +msgstr "Операция gmean(narm=%s) занимает... " + +#: gsumm.c:630 gsumm.c:686 +#, c-format +msgid "Unable to allocate %d * %zu bytes for non-NA counts in gmean na.rm=TRUE" +msgstr "" +"Не удалось выделить %d * %zu байт для количеств не-пропущенных значений в " +"gmean(na.rm=TRUE)" + +#: gsumm.c:722 +#, c-format +msgid "" +"Type '%s' not supported by GForce mean (gmean). Either add the prefix base::" +"mean(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" +"Тип '%s' не поддерживается GForce mean() (gmean). Либо добавьте префикс " +"base::mean(.), либо отключите оптимизацию GForce с помощью options(datatable." +"optimize=1)" + +#: gsumm.c:734 +msgid "" +"GForce min/max can only be applied to columns, not .SD or similar. To find " +"min/max of all items in a list such as .SD, either add the prefix base::min(." +"SD) or turn off GForce optimization using options(datatable.optimize=1). " +"More likely, you may be looking for 'DT[,lapply(.SD,min),by=,.SDcols=]'" +msgstr "" +"GForce min/max можно применять только к столбцам, но не к .SD и тому " +"подобным. Чтобы найти min/max для всех элементов в списке, например .SD, " +"либо добавьте префикс base::min(.SD), либо отключите оптимизацию GForce с " +"помощью options(datatable.optimize=1). Скорее всего, Вам нужно 'DT[,lapply(." +"SD,min),by=,.SDcols=]'" + +#: gsumm.c:845 +msgid "Type 'complex' has no well-defined min/max" +msgstr "Для комплексных чисел нет максимума или минимума" + +#: gsumm.c:871 +msgid "" +"GForce median can only be applied to columns, not .SD or similar. To find " +"median of all items in a list such as .SD, either add the prefix stats::" +"median(.SD) or turn off GForce optimization using options(datatable." +"optimize=1). More likely, you may be looking for 'DT[,lapply(.SD,median)," +"by=,.SDcols=]'" +msgstr "" +"GForce median можно применять только к столбцам, но не к .SD и тому " +"подобным. Чтобы найти медиану для всех элементов в списке, например .SD, " +"либо добавьте префикс stats::median(.SD), либо отключите оптимизацию GForce " +"с помощью options(datatable.optimize=1). Скорее всего, Вам нужно 'DT[," +"lapply(.SD,median),by=,.SDcols=]'" + +#: gsumm.c:988 +#, c-format +msgid "" +"Type '%s' is not supported by GForce head/tail/first/last/`[`. Either add " +"the namespace prefix (e.g. utils::head(.)) or turn off GForce optimization " +"using options(datatable.optimize=1)" +msgstr "" +"Тип '%s' не поддерживается GForce head/tail/first/last/`[`. Либо добавьте " +"префикс пространства имен (например, utils::head(.)), либо отключите " +"оптимизацию GForce с помощью options(datatable.optimize=1)" + +#: gsumm.c:1026 +msgid "" +"GForce var/sd can only be applied to columns, not .SD or similar. For the " +"full covariance matrix of all items in a list such as .SD, either add the " +"prefix stats::var(.SD) (or stats::sd(.SD)) or turn off GForce optimization " +"using options(datatable.optimize=1). Alternatively, if you only need the " +"diagonal elements, 'DT[,lapply(.SD,var),by=,.SDcols=]' is the optimized way " +"to do this." +msgstr "" +"GForce var/sd можно применять только к столбцам, но не к .SD и тому " +"подобным. Для получения полной ковариационной матрицы всех элементов списка, " +"например .SD, либо добавьте префикс stats::var(.SD) (или stats::sd(.SD)), " +"либо отключите оптимизацию GForce с помощью options(datatable.optimize=1). " +"Если Вам нужны только диагональные элементы, попробуйте 'DT[,lapply(.SD,var)," +"by=,.SDcols=]'." + +#: gsumm.c:1120 +msgid "" +"GForce prod can only be applied to columns, not .SD or similar. To multiply " +"all items in a list such as .SD, either add the prefix base::prod(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,prod),by=,.SDcols=]'" +msgstr "" +"GForce prod можно применять только к столбцам, но не к .SD и тому подобным. " +"Чтобы перемножить все элементы в списке, например .SD, либо добавьте префикс " +"base::prod(.SD), либо отключите оптимизацию GForce с помощью " +"options(datatable.optimize=1). Вероятно, Вам нужно 'DT[,lapply(.SD,prod)," +"by=,.SDcols=]'" + +#: gsumm.c:1129 +#, c-format +msgid "Unable to allocate %d * %zu bytes for gprod" +msgstr "Не удалось выделить %d * %zu байт для gprod" + +#: gsumm.c:1220 shift.c:34 +#, c-format +msgid "Item %d of n is NA" +msgstr "Элемент №%d из n является NA" + +#: gsumm.c:1277 +#, c-format +msgid "" +"Type '%s' is not supported by GForce gshift. Either add the namespace prefix " +"(e.g. data.table::shift(.)) or turn off GForce optimization using " +"options(datatable.optimize=1)" +msgstr "" +"Тип '%s' не поддерживается GForce gshift. Либо добавьте префикс пространства " +"имен (например, data.table::shift(.)), либо отключите оптимизацию GForce с " +"помощью options(datatable.optimize=1)" + +#: idatetime.c:126 vecseq.c:13 +msgid "x must be an integer vector" +msgstr "x должен быть целочисленным вектором" + +#: ijoin.c:128 +#, c-format +msgid "First pass on calculating lengths in lookup ... done in %8.3f seconds\n" +msgstr "" +"Первый проход вычислений длин в функции lookup() ... выполнен за %8.3f " +"секунд\n" + +#: ijoin.c:141 +#, c-format +msgid "Second pass on allocation in lookup ... done in %8.3f seconds\n" +msgstr "" +"Второй проход, выделение памяти в lookup() ... выполнено за %8.3f секунд\n" + +#: ijoin.c:220 +#, c-format +msgid "Final step in generating lookup ... done in %8.3f seconds\n" +msgstr "Последний проход, вычисление lookup() ... готово за %8.3f секунд\n" + +#: ijoin.c:330 +#, c-format +msgid "" +"First pass on calculating lengths in overlaps ... done in %8.3f seconds\n" +msgstr "" +"Первый проход, вычисление длин в overlaps() ... выполнено за %8.3f секунд\n" + +#: ijoin.c:729 +#, c-format +msgid "Final step, fetching indices in overlaps ... done in %8.3f seconds\n" +msgstr "" +"Последний проход, получение индексов в overlaps() ... готово за %8.3f " +"секунд\n" + +#: init.c:173 +msgid "" +"Pointers are %zu bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "" +"Указатели имеют размер %zu байт, что больше 8. Мы ничего не тестировали на " +"архитектурах с более чем 64-битным адресным пространством." + +#: init.c:187 +msgid "... failed. Please forward this message to maintainer('data.table')." +msgstr "" +"... ошибка. Пожалуйста, перешлите это сообщение по адресу maintainer('data." +"table')." + +#: init.c:188 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "Проверяю NA_INTEGER [%d] == INT_MIN [%d] %s" + +#: init.c:189 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "Проверяю NA_INTEGER [%d] == NA_LOGICAL [%d] %s" + +#: init.c:190 init.c:191 init.c:193 init.c:196 init.c:197 init.c:198 init.c:199 +#: init.c:200 init.c:201 init.c:202 +#, c-format +msgid "Checking sizeof(%s) [%zu] is %d %s" +msgstr "Проверяю sizeof(%s) [%zu] == %d %s" + +#: init.c:194 +#, c-format +msgid "Checking sizeof(pointer) [%zu] is 4 or 8 %s" +msgstr "Проверяю sizeof(указатель) [%zu] == 4 или 8 %s" + +#: init.c:195 +#, c-format +msgid "Checking sizeof(SEXP) [%zu] == sizeof(pointer) [%zu] %s" +msgstr "Проверяю sizeof(SEXP) [%zu] == sizeof(указатель) [%zu] %s" + +#: init.c:205 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "Проверяю, что LENGTH(allocVector(INTSXP,2)) [%d] == 2 %s" + +#: init.c:207 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%lld] is 0 %s" +msgstr "Проверяю, что TRUELENGTH(allocVector(INTSXP,2)) [%lld] == 0 %s" + +#: init.c:214 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "Проверяю: memset(&i,0,sizeof(int)); i == (int)0 %s" + +#: init.c:217 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "" +"Проверяю: memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" + +#: init.c:220 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "Проверяю: memset(&d, 0, sizeof(double)); d == (double)0.0 %s" + +#: init.c:223 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "" +"Проверяю: memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" + +#: init.c:226 +msgid "" +"Unlike the very common case, e.g. ASCII, the character '/' is not just " +"before '0'." +msgstr "" +"В отличие от ASCII-совместимых кодировок, в системной кодировке символ '/' " +"не располагается сразу перед '0'." + +#: init.c:227 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "" +"Выражение на языке C (uint_fast8_t)('/'-'0')<10 возвращает истину, а должно " +"возвращать ложь." + +#: init.c:228 +msgid "" +"Unlike the very common case, e.g. ASCII, the character ':' is not just after " +"'9'." +msgstr "" +"В отличие от ASCII-совместимых кодировок, в системной кодировке символ ':' " +"не располагается сразу после '9'" + +#: init.c:229 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "" +"Выражение на языке C (uint_fast8_t)('9'-':')<10 возвращает истину, а должно " +"возвращать ложь." + +#: init.c:234 +#, c-format +msgid "Conversion of NA_INT64 via double failed %!=%" +msgstr "" +"Не удалось перевести NA_INT64 в double и обратно без потерь: %!" +"=%" + +#: init.c:238 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "" +"NA_INT64_D (-0.0, отрицательный ноль с плавающей запятой) не равно == 0.0." + +#: init.c:239 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "" +"NA_INT64_D (-0.0, отрицательный ноль с плавающей запятой) не равно == -0.0." + +#: init.c:240 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "ISNAN(NA_INT64_D) равно TRUE, хотя не должно" + +#: init.c:241 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "isnan(NA_INT64_D) равно TRUE, хотя не должно" + +#: init.c:275 +#, c-format +msgid "PRINTNAME(install(\"integer64\")) has returned %s not %s" +msgstr "PRINTNAME(install(\"integer64\")) вернула %s вместо %s" + +#: init.c:334 +msgid "verbose option must be length 1 non-NA logical or integer" +msgstr "" +"опция \"verbose\" должна быть логическим или целочисленным скаляром, не-NA" + +#: init.c:368 +msgid ".Last.updated in namespace is not a length 1 integer" +msgstr "" +".Last.updated в пространстве имён data.table не является целочисленным " +"вектором длины 1" + +#: nafill.c:115 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "" +"Аргумент 'x' - атомарный вектор; обновление на месте поддерживается только " +"для списка/data.table" + +#: nafill.c:117 nafill.c:128 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "" +"Аргумент 'x' должен быть численным или списком/data.table численных векторов" + +#: nafill.c:184 +msgid "fill must be a vector of length 1 or a list of length of x" +msgstr "" +"'fill' должен быть вектором длины 1 или списком такой же длины, как 'x'" + +#: openmp-utils.c:23 +#, c-format +msgid "" +"Ignoring invalid %s==\"%s\". Not an integer >= 1. Please remove any " +"characters that are not a digit [0-9]. See ?data.table::setDTthreads." +msgstr "" +"Игнорирую неправильное %s==\"%s\", потому что оно не является целым числом " +">= 1. Удалите все символы, которые не являются цифрами [0-9]. См. ?data." +"table::setDTthreads." + +#: openmp-utils.c:44 +#, c-format +msgid "" +"Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an " +"integer between 2 and 100. Default is 50. See ?setDTtheads." +msgstr "" +"Игнорирую неправильное значение R_DATATABLE_NUM_PROCS_PERCENT==%d. Должно " +"быть целым между 2 и 100, по умолчанию 50. См. ?setDTtheads." + +#: openmp-utils.c:82 +msgid "" +"This installation of data.table has not been compiled with OpenMP support.\n" +msgstr "Эта копия data.table не была собрана с поддержкой OpenMP.\n" + +#: openmp-utils.c:84 +#, c-format +msgid " OpenMP version (_OPENMP) %d\n" +msgstr " версия OpenMP (_OPENMP) %d\n" + +#: openmp-utils.c:100 +#, c-format +msgid "" +" data.table is using %d threads with throttle==%d. See ?setDTthreads.\n" +msgstr "" +" data.table использует %d потоков с throttle==%d. См. ?setDTthreads.\n" + +#: openmp-utils.c:108 +msgid "" +"restore_after_fork= must be TRUE, FALSE, or NULL (default). " +"getDTthreads(verbose=TRUE) reports the current setting.\n" +msgstr "" +"restore_after_fork= должно быть TRUE, FALSE или NULL (по умолчанию). " +"getDTthreads(verbose=TRUE) сообщает о текущих настройках.\n" + +#: openmp-utils.c:114 +msgid "'throttle' must be a single number, non-NA, and >=1" +msgstr "'throttle' должно быть числом, не NА и >=1" + +#: openmp-utils.c:128 +msgid "" +"threads= must be either NULL or a single number >= 0. See ?setDTthreads." +msgstr "threads= должен быть либо NULL, либо числом >= 0. См. ?setDTthreads." + +#: programming.c:17 +#, c-format +msgid "" +"Attempting to substitute '%s' element with object of type '%s' but it has to " +"be 'symbol' type when substituting name of the call argument, functions 'as." +"name' and 'I' can be used to work out proper substitution, see ?substitute2 " +"examples." +msgstr "" +"Попытка подставить вместо имени '%s' объект типа '%s', но в качестве имён " +"аргументов функций работают только типы 'symbol' и 'character'. Используйте " +"I() и as.name(), чтобы собрать подходящий аргумент 'env'. См. примеры ?" +"substitute2." + +#: rbindlist.c:10 +msgid "use.names= should be TRUE, FALSE, or not used (\"check\" by default)" +msgstr "" +"use.names= должно быть TRUE, FALSE или не использоваться (\"check\" по " +"умолчанию)" + +#: rbindlist.c:14 +msgid "" +"Input to rbindlist must be a list. This list can contain data.tables, data." +"frames or plain lists." +msgstr "" +"Входной аргумент для rbindlist должен представлять собой список. Этот список " +"может содержать data.table, data.frame или обычные списки." + +#: rbindlist.c:33 +#, c-format +msgid "Item %d of input is not a data.frame, data.table or list" +msgstr "" +"Элемент №%d входного аргумента не является data.frame, data.table или списком" + +#: rbindlist.c:41 +#, c-format +msgid "" +"Item %d has %d columns, inconsistent with item %d which has %d columns. To " +"fill missing columns use fill=TRUE." +msgstr "" +"В элементе №%d - %d столбцов, что не соответствует элементу %d, в котором %d " +"столбцов. Чтобы дополнить недостающие столбцы, используйте fill=TRUE." + +#: rbindlist.c:44 +#, c-format +msgid "Item %d has %d columns but %d column names. Invalid object." +msgstr "" +"В элементе №%d - %d столбцов, но %d имён столбцов. Это неправильный объект." + +#: rbindlist.c:51 +#, c-format +msgid "" +"Column %d of item %d is length %d inconsistent with column %d which is " +"length %d. Only length-1 columns are recycled." +msgstr "" +"Столбец %d элемента №%d длиной %d несовместим со столбцом %d, длина которого " +"составляет %d. \"Повторно используются\" только столбцы длины 1." + +#: rbindlist.c:66 +#, c-format +msgid "" +"Total rows in the list is % which is larger than the maximum number " +"of rows, currently %d" +msgstr "" +"В списке всего % строк, что больше, чем максимально возможное " +"количество строк, в настоящее время %d" + +#: rbindlist.c:67 +msgid "use.names=TRUE but no item of input list has any names" +msgstr "use.names=TRUE, но ни один элемент входного списка не имеет имен" + +#: rbindlist.c:76 +#, c-format +msgid "" +"Failed to allocate upper bound of % unique column names " +"[sum(lapply(l,ncol))]" +msgstr "" +"Не удалось выделить память под верхнюю оценку количества уникальных имён " +"столбцов [sum(lapply(l,ncol)) = %]" + +#: rbindlist.c:105 +#, c-format +msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" +msgstr "Не удалось выделить nuniq=%d элементов рабочей памяти в rbindlist.c" + +#: rbindlist.c:140 +#, c-format +msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" +msgstr "Не удалось выделить ncol=%d элементов рабочей памяти в rbindlist.c" + +#: rbindlist.c:201 +msgid "" +" use.names='check' (default from v1.12.2) emits this message and proceeds as " +"if use.names=FALSE for backwards compatibility. See news item 5 in v1.12.2 " +"for options to control this message." +msgstr "" +" в целях обратной совместимости use.names='check' (по умолчанию с версии " +"1.12.2) выдает это сообщение и продолжает работу, как если бы было use." +"names=FALSE. О том, как управлять этим сообщением, см. в новости 5 для " +"версии 1.12.2." + +#: rbindlist.c:215 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is missing in item %d. Use fill=TRUE to fill " +"with NA (NULL for list columns), or use.names=FALSE to ignore column names.%s" +msgstr "" +"Столбец %d ['%s'] элемента №%d отсутствует в элементе №%d. Используйте " +"fill=TRUE для заполнения NA (NULL для столбцов списка), или use.names=FALSE " +"для игнорирования имен столбцов.%s" + +#: rbindlist.c:224 +#, c-format +msgid "" +"Column %d ['%s'] of item %d appears in position %d in item %d. Set use." +"names=TRUE to match by column name, or use.names=FALSE to ignore column " +"names.%s" +msgstr "" +"Столбец %d ['%s'] элемента №%d появляется в позиции %d в элементе №%d. " +"Установите use.names=TRUE для поиска по имени столбца или use.names=FALSE " +"для игнорирования имен столбцов.%s" + +#: rbindlist.c:233 +msgid "" +"options()$datatable.rbindlist.check is set but is not a single string. See " +"news item 5 in v1.12.2." +msgstr "" +"options()$datatable.rbindlist.check задано, но не является строкой. См. " +"новость 5 в версии 1.12.2." + +#: rbindlist.c:240 +#, c-format +msgid "" +"options()$datatable.rbindlist.check=='%s' which is not " +"'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2." +msgstr "" +"options()$datatable.rbindlist.check=='%s', что не является " +"'message'|'warning'|'error'|'none'. См. новость 5 в версии 1.12.2." + +#: rbindlist.c:303 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" +"Столбец %d элемента №%d имеет тип 'factor', но не имеет уровней, т.е. " +"некорректен." + +#: rbindlist.c:332 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d. You can deactivate this safety-check by using ignore.attr=TRUE" +msgstr "" +"Атрибут 'class' в столбце %d элемента №%d не совпадает со столбцом %d " +"элемента №%d. Вы можете отключить эту проверку, используя ignore.attr=TRUE" + +#: rbindlist.c:383 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "" +"Не удалось выделить рабочую память для %d упорядоченных уровней факторов в " +"столбце результатов №%d" + +#: rbindlist.c:406 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor but level %d ['%s'] is missing " +"from the ordered levels from column %d of item %d. Each set of ordered " +"factor levels should be an ordered subset of the first longest. A regular " +"factor will be created for this column." +msgstr "" +"Столбец %d элемента №%d является упорядоченным фактором, но уровень %d " +"['%s'] отсутствует в упорядоченных уровнях из столбца %d элемента №%d. " +"Каждый набор упорядоченных уровней фактора должен быть упорядоченным " +"подмножеством первого самого длинного. Для этого столбца будет создан " +"обычный фактор." + +#: rbindlist.c:411 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor with '%s'<'%s' in its levels. But " +"'%s'<'%s' in the ordered levels from column %d of item %d. A regular factor " +"will be created for this column due to this ambiguity." +msgstr "" +"Столбец %1$d элемента №%2$d является упорядоченным фактором с '%3$s'<'%4$s' " +"в его уровнях. Однако, в упорядоченных уровнях из столбца %7$d элемента №" +"%8$d '%5$s'<'%6$s'. Из-за этой неоднозначности для этого столбца будет " +"создан обычный фактор." + +#: rbindlist.c:456 +#, c-format +msgid "" +"Failed to allocate working memory for %d factor levels of result column %d " +"when reading item %d of item %d" +msgstr "" +"Не удалось выделить рабочую память для %d уровней факторов в столбце " +"результатов %d при чтении элемента №%d из элемента №%d" + +#: rbindlist.c:548 rbindlist.c:551 +#, c-format +msgid "Column %d of item %d: %s" +msgstr "Столбец %d элемента %d: %s" + +#: reorder.c:22 +#, c-format +msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%zu)" +msgstr "" +"Элемент списка №%d имеет тип '%s', который пока не поддерживается " +"(SIZEOF=%zu)" + +#: reorder.c:24 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d). Invalid " +"data.table." +msgstr "" +"Столбец №%d имеет длину %d, которая отличается от длины столбца №1 (%d). " +"Неправильная таблица данных." + +#: reorder.c:32 +#, c-format +msgid "" +"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " +"supported (SIZEOF=%zu)" +msgstr "" +"reorder() принимает векторы, но этот не-VECSXP вектор имеет тип '%s', " +"который пока не поддерживается (SIZEOF=%zu)" + +#: reorder.c:39 +msgid "order must be an integer vector" +msgstr "order должен быть целочисленным вектором" + +#: reorder.c:58 +#, c-format +msgid "" +"Item %d of order (%d) is either NA, out of range [1,%d], or is duplicated. " +"The new order must be a strict permutation of 1:n" +msgstr "" +"Элемент №%d вектора 'order' (%d) является либо NA, либо находится вне " +"диапазона [1,%d], либо дублирован. Новый порядок должен быть перестановкой 1:" +"n без повторения" + +#: reorder.c:118 +msgid "dt passed to setcolorder has no names" +msgstr "в функции setcolorder у dt нет имён" + +#: shift.c:12 +msgid "" +"shift input must not be matrix or array, consider wrapping it into data." +"table() or c()" +msgstr "" +"входной аргумент для shift() не должен быть матрицей или массивом; возможно, " +"Вам стоит обернуть его в data.table() или c()" + +#: shift.c:17 +#, c-format +msgid "" +"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" +msgstr "" +"в shift() передан объект типа '%s'. Должен быть вектором, списком, data." +"frame или data.table" + +#: snprintf.c:193 snprintf.c:196 snprintf.c:199 snprintf.c:202 snprintf.c:205 +#: snprintf.c:208 snprintf.c:211 snprintf.c:214 snprintf.c:217 snprintf.c:221 +#: snprintf.c:224 snprintf.c:227 snprintf.c:230 snprintf.c:233 snprintf.c:236 +#: snprintf.c:239 snprintf.c:242 snprintf.c:245 +#, c-format +msgid "dt_win_snprintf test %d failed: %s" +msgstr "dt_win_snprintf тест %d завершился с ошибкой: %s" + +#: snprintf.c:218 +#, c-format +msgid "dt_win_snprintf test %d failed: %d" +msgstr "dt_win_snprintf тест %d завершился с ошибкой: %d" + +#: subset.c:182 +#, c-format +msgid "" +"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." +msgstr "" +"Элемент №%d в i равен %d, а элемент №%d равен %d. Нельзя смешивать " +"положительные и отрицательные значения." + +#: subset.c:192 +#, c-format +msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." +msgstr "" +"Элемент №%d в i - это %d, а элемент №%d - это NA. Нельзя смешивать " +"отрицательные значения и NA." + +#: subset.c:239 +#, c-format +msgid "" +"Item %d of i is %d but there are only %d rows. Ignoring this and %d more " +"like it out of %d." +msgstr "" +"Элемент №%d из i - это %d, но есть только %d строк. Пропускаю его и еще %d " +"из %d подобных элементов." + +#: subset.c:241 +#, c-format +msgid "" +"Item %d of i is %d which removes that item but that has occurred before. " +"Ignoring this dup and %d other dups." +msgstr "" +"Элемент №%d из i - это %d, который удаляет этот уже удалённый элемент. " +"Пропускаю этот дубль и %d других дублей." + +#: subset.c:255 +#, c-format +msgid "Column %d is NULL; malformed data.table." +msgstr "Столбец %d является NULL; неправильная data.table." + +#: subset.c:258 +#, c-format +msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." +msgstr "" +"Столбец %d ['%s'] является data.frame или data.table; неправильная data." +"table." + +#: subset.c:263 +#, c-format +msgid "" +"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." +"table." +msgstr "" +"Столбец %d ['%s'] имеет длину %d, но столбец 1 имеет длину %d; неправильная " +"data.table." + +#: subset.c:296 +#, c-format +msgid "Item %d of cols is %d which is outside the range [1,ncol(x)=%d]" +msgstr "" +"Элемент №%d из 'cols' равен %d, что выходит за пределы диапазона [1," +"ncol(x)=%d]" + +#: transpose.c:9 +msgid "l must be a list." +msgstr "'I' должно быть списком." + +#: transpose.c:13 +msgid "ignore.empty should be logical TRUE/FALSE." +msgstr "ignore.empty должен быть логическим TRUE/FALSE." + +#: transpose.c:16 +msgid "" +"keep.names should be either NULL, or the name of the first column of the " +"result in which to place the names of the input" +msgstr "" +"keep.names должен быть либо NULL, либо именем первого столбца результата, в " +"который следует поместить имена входных данных" + +#: transpose.c:19 +msgid "fill must be a length 1 vector, such as the default NA" +msgstr "fill должен быть вектором длины 1, например, по умолчанию NA" + +#: transpose.c:22 +msgid "list.cols should be logical TRUE/FALSE." +msgstr "list.cols должен быть логическим TRUE/FALSE." + +#: transpose.c:31 +#, c-format +msgid "Item %d of list input is not either an atomic vector, or a list" +msgstr "" +"Элемент №%d входного списка не является ни атомарным вектором, ни списком" + +#: uniqlist.c:151 +msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" +msgstr "" +"Входной аргумент 'x' функции 'uniqlengths' должен быть целочисленным вектором" + +#: uniqlist.c:152 +msgid "" +"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" +msgstr "Входной аргумент 'n' функции 'uniqlengths' должен быть целым числом" + +#: uniqlist.c:170 uniqlist.c:267 +msgid "cols must be an integer vector with length >= 1" +msgstr "cols должен быть целочисленным вектором длины >= 1" + +#: uniqlist.c:174 +#, c-format +msgid "Item %d of cols is %d which is outside the range [1,length(l)=%d]" +msgstr "cols[%d] = %d, что вне допустимого диапазона [1,length(l)=%d]" + +#: uniqlist.c:177 +#, c-format +msgid "" +"All elements to input list must be of same length. Element [%d] has length " +"% != length of first element = %." +msgstr "" +"Все элементы входного списка должны быть одинаковой длины. Элемент [%d] дан " +"длины %, что не равно длине первого элемента, %." + +#: uniqlist.c:352 +msgid "x is not a logical vector" +msgstr "x не является логическим вектором" + +#: utils.c:95 +#, c-format +msgid "Unsupported type '%s' passed to allNA()" +msgstr "Функции allNA() передано значение неподдерживаемого типа '%s'" + +#: utils.c:115 +msgid "'x' argument must be data.table compatible" +msgstr "аргумент 'x' должен быть совместимым с data.table" + +#: utils.c:139 +msgid "" +"argument specifying columns is type 'double' and one or more items in it are " +"not whole integers" +msgstr "" +"номера строк переданы в виде чисел с плавающей запятой, и как минимум одно " +"из них не является целым" + +#: utils.c:145 +#, c-format +msgid "" +"argument specifying columns received non-existing column(s): cols[%d]=%d" +msgstr "передан несуществующий столбец: cols[%d]='%d'" + +#: utils.c:152 +msgid "'x' argument data.table has no names" +msgstr "'x', переданный data.table(), не имеет имён" + +#: utils.c:158 +#, c-format +msgid "" +"argument specifying columns received non-existing column(s): cols[%d]='%s'" +msgstr "передан несуществующий столбец: cols[%d]='%s'" + +#: utils.c:162 +msgid "argument specifying columns must be character or numeric" +msgstr "переданный список столбцов должен быть вектором строк или чисел" + +#: utils.c:165 +msgid "argument specifying columns received duplicate column(s)" +msgstr "в переданном списке столбцов нашлись дубликаты" + +#: utils.c:383 +msgid "'x' is not atomic" +msgstr "'x' не является атомарным" + +#: utils.c:385 +msgid "'x' must not be matrix or array" +msgstr "'x' не должен быть матрицей или многомерным массивом" + +#: utils.c:387 +msgid "input must not be matrix or array" +msgstr "входной аргумент не должен быть матрицей или многомерным массивом" + +#: utils.c:391 +#, c-format +msgid "copy=false and input already of expected type and class %s[%s]\n" +msgstr "copy=false и входные данные и так нужного типа и класса %s[%s]\n" + +#: utils.c:398 +#, c-format +msgid "Coercing %s[%s] into %s[%s]\n" +msgstr "Преобразую %s[%s] в %s[%s]\n" + +#: utils.c:414 +#, c-format +msgid "zlib header files were not found when data.table was compiled" +msgstr "При компиляции data.table не были найдены заголовочные файлы zlib" + +#: vecseq.c:14 +msgid "len must be an integer vector" +msgstr "'len' должна быть целочисленным вектором" + +#: vecseq.c:15 +msgid "x and len must be the same length" +msgstr "'x' и 'len' должны быть одинаковой длины" + +#: vecseq.c:21 +msgid "" +"Join results in more than 2^31 rows (internal vecseq reached physical " +"limit). Very likely misspecified join. Check for duplicate key values in i " +"each of which join to the same group in x over and over again. If that's ok, " +"try by=.EACHI to run j for each group to avoid the large allocation. " +"Otherwise, please search for this error message in the FAQ, Wiki, Stack " +"Overflow and data.table issue tracker for advice." +msgstr "" +"Соединение даёт >= 2^31 строк, что превышает физический лимит на длину " +"столбца. Проверьте, нет ли дублирующихся значений ключей в 'i', которые " +"больше одного раза подходят к группам из 'x'. Если подобный результат Вас " +"устроит, попробуйте by=.EACHI, чтобы выполнить 'j' для каждой группы в " +"отдельности и избежать большого выделения памяти. В противном случае, " +"попробуйте поискать это сообщение об ошибке — «Join results in more than " +"2^31 rows (internal vecseq reached physical limit)» — в ЧаВо, Wiki, Stack " +"Overflow, а также трекере ошибок в data.table." + +#: vecseq.c:25 +msgid "clamp must be a double vector length 1" +msgstr "'clamp' должно быть действительным числом (вектор длины 1)" + +#: vecseq.c:27 +msgid "clamp must be positive" +msgstr "'clamp' должно быть положительным" + +#: vecseq.c:28 +#, c-format +msgid "" +"Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate " +"key values in i each of which join to the same group in x over and over " +"again. If that's ok, try by=.EACHI to run j for each group to avoid the " +"large allocation. If you are sure you wish to proceed, rerun with allow." +"cartesian=TRUE. Otherwise, please search for this error message in the FAQ, " +"Wiki, Stack Overflow and data.table issue tracker for advice." +msgstr "" +"Соединение даёт %1$d строк, что больше, чем %2$d = nrow(x)+nrow(i). " +"Проверьте, нет ли дублирующихся значений ключей в 'i', которые больше одного " +"раза подходят к группам из 'x'. Если подобный результат Вас устроит, " +"попробуйте by=.EACHI, чтобы выполнить 'j' для каждой группы в отдельности и " +"избежать большого выделения памяти. Если Вы хотите именно перекрёстное " +"слияние, используйте allow.cartesian=TRUE. В противном случае, попробуйте " +"поискать это сообщение об ошибке («Join results in %1$d rows; more than %2$d " +"= nrow(x)+nrow(i)») в ЧаВо, Wiki, Stack Overflow, а также трекере ошибок в " +"data.table." + +#: wrappers.c:11 +msgid "Attribute name must be a character vector of length 1" +msgstr "Имя атрибута должно быть строкой (вектором длины 1)" + +#: wrappers.c:16 +msgid "" +"Internal structure doesn't seem to be a list. Can't set class to be 'data." +"table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods " +"instead." +msgstr "" +"Внутренняя структура не является списком. Не могу выставить класс 'data." +"table' или 'data.frame'. Пожалуйста, используйте вместо этого 'as.data." +"table()' или 'as.data.frame()'." + +#: wrappers.c:68 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "i (%d) вне допустимого диапазона [1,%d]" + +#: wrappers.c:99 +msgid "x isn't a VECSXP" +msgstr "x не является VECSXP" + +#: wrappers.c:114 +#, c-format +msgid "" +"dim.data.table expects a data.table as input (which is a list), but seems to " +"be of type %s" +msgstr "" +"Для dim.data.table() в качестве входного аргумента нужна data.table (т.е. " +"список), а досталось значение типа %s" + +#, c-format +#~ msgid "RHS_list_of_columns == %s\n" +#~ msgstr "RHS_list_of_columns == %s\n" + +#~ msgid "%" +#~ msgstr "%" + +#, c-format +#~ msgid "typeof x.%s (%s) != typeof i.%s (%s)" +#~ msgstr "typeof x.%s (%s) != typeof i.%s (%s)" + +#, c-format +#~ msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" +#~ msgstr "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" + +#~ msgid "length(names)!=length(SD)" +#~ msgstr "length(names)!=length(SD)" + +#~ msgid "length(xknames)!=length(xSD)" +#~ msgstr "length(xknames)!=length(xSD)" + +#, c-format +#~ msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +#~ msgstr "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" + +#~ msgid "names(data) is NULL. Please report to data.table-help" +#~ msgstr "" +#~ "names(data) равно NULL. Пожалуйста, обратитесь в трекер ошибок data.table" + +#, c-format +#~ msgid "nradix=%d\n" +#~ msgstr "nradix=%d\n" + +#, c-format +#~ msgid "stat[%03d]==%20\n" +#~ msgstr "stat[%03d]==%20\n" + +#~ msgid " NAstrings = [" +#~ msgstr " NAstrings = [" + +#~ msgid "]\n" +#~ msgstr "]\n" + +#, c-format +#~ msgid "nrow limit (%) supplied\n" +#~ msgstr "передан предел количества строк (%)\n" + +#~ msgid "jump0size==0\n" +#~ msgstr "jump0size==0\n" + +#~ msgid " =====\n" +#~ msgstr " =====\n" + +#, c-format +#~ msgid " jumps=[%d..%d), chunk_size=%, total_size=%\n" +#~ msgstr " jumps=[%d..%d), chunk_size=%, total_size=%\n" + +#~ msgid "=============================\n" +#~ msgstr "=============================\n" + +#, c-format +#~ msgid "nThread(%d)<1" +#~ msgstr "nThread(%d)<1" + +#, c-format +#~ msgid "%s" +#~ msgstr "%s" + +#, c-format +#~ msgid "nth=%d, nBatch=%d\n" +#~ msgstr "nth=%d, nBatch=%d\n" + +#, c-format +#~ msgid "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%zu\n" +#~ msgstr "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%zu\n" + +#, c-format +#~ msgid "Reduced MSBsize from %zu to " +#~ msgstr "'MSBsize' уменьшено с %zu до " + +#, c-format +#~ msgid "buffMB=%d outside [1,1024]" +#~ msgstr "buffMB=%d не в диапазоне [1,1024]" + +#, c-format +#~ msgid "%d " +#~ msgstr "%d " + +#~ msgid "... " +#~ msgstr "... " + +#, c-format +#~ msgid "" +#~ "\n" +#~ "args.doRowNames=%d args.rowNames=%p args.rowNameFun=%d doQuote=%d args." +#~ "nrow=% args.ncol=%d eolLen=%d\n" +#~ msgstr "" +#~ "\n" +#~ "args.doRowNames=%d args.rowNames=%p args.rowNameFun=%d doQuote=%d args." +#~ "nrow=% args.ncol=%d eolLen=%d\n" + +#, c-format +#~ msgid "Unable to allocate %zu MiB for header: %s" +#~ msgstr "Не удалось выделить %zu МиБ для заголовка: %s" + +#, c-format +#~ msgid "Unable to allocate %zu MiB for zbuffer: %s" +#~ msgstr "Не удалось выделить %zu МиБ для zbuffer: %s" + +#, c-format +#~ msgid "Failed to allocated %d bytes for '%s'." +#~ msgstr "Не удалось выделить %d байт для '%s'." + +#, c-format +#~ msgid "length(f)=%d != length(l)=%d" +#~ msgstr "length(f)=%d != length(l)=%d" + +#, c-format +#~ msgid " omp_get_num_procs() %d\n" +#~ msgstr " omp_get_num_procs() %d\n" + +#, c-format +#~ msgid " R_DATATABLE_NUM_PROCS_PERCENT %s\n" +#~ msgstr " R_DATATABLE_NUM_PROCS_PERCENT %s\n" + +#, c-format +#~ msgid " R_DATATABLE_NUM_THREADS %s\n" +#~ msgstr " R_DATATABLE_NUM_THREADS %s\n" + +#, c-format +#~ msgid " R_DATATABLE_THROTTLE %s\n" +#~ msgstr " R_DATATABLE_THROTTLE %s\n" + +#, c-format +#~ msgid " omp_get_thread_limit() %d\n" +#~ msgstr " omp_get_thread_limit() %d\n" + +#, c-format +#~ msgid " omp_get_max_threads() %d\n" +#~ msgstr " omp_get_max_threads() %d\n" + +#, c-format +#~ msgid " OMP_THREAD_LIMIT %s\n" +#~ msgstr " OMP_THREAD_LIMIT %s\n" + +#, c-format +#~ msgid " OMP_NUM_THREADS %s\n" +#~ msgstr " OMP_NUM_THREADS %s\n" + +#, c-format +#~ msgid " RestoreAfterFork %s\n" +#~ msgstr " RestoreAfterFork %s\n" + +#, c-format +#~ msgid "nrow(x)[%d]!=length(order)[%d]" +#~ msgstr "nrow(x)[%d]!=length(order)[%d]" + +#~ msgid "First argument to setlistelt must be a list()" +#~ msgstr "Первый аргумент setlistelt() должен быть списком" + +#~ msgid "Second argument to setlistelt must a length 1 integer vector" +#~ msgstr "Второй аргумент setlistelt() должен быть одним целым числом" + +#, c-format +#~ msgid "Added %d new column%s initialized with all-NA\n" +#~ msgstr "Добавлено %d новых столбцов%.0s, инициализированных всеми NA\n" + +#, c-format +#~ msgid "Found and copied %d column%s with a shared memory address\n" +#~ msgstr "Найдено и скопировано %d столбцов%.0s с общим адресом в памяти\n" + +#~ msgid "Internal error: finalizer hasn't received an ExternalPtr" +#~ msgstr "Внутренняя ошибка: финализатор не получил ExternalPtr" + +#~ msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +#~ msgstr "Внутренняя ошибка: ExternalPtr финализатора не видит имен в теге" + +#, c-format +#~ msgid "Internal error: finalizer sees l=%d, tl=%d" +#~ msgstr "Внутренняя ошибка: финализатор видит l=%d, tl=%d" + +#~ msgid "Internal error: .internal.selfref ptr is neither NULL nor R_NilValue" +#~ msgstr "" +#~ "Внутренняя ошибка: указатель .internal.selfref не является ни NULL, ни " +#~ "R_NilValue" + +#~ msgid "" +#~ "Internal error: .internal.selfref tag is neither NULL nor a character " +#~ "vector" +#~ msgstr "" +#~ "Внутренняя ошибка: тег .internal.selfref не является ни NULL, ни вектором " +#~ "строк" + +#~ msgid "Internal error: length(names)>0 but 0, но <длина(dt)" + +#, c-format +#~ msgid "Internal error: length of names (%d) is not length of dt (%d)" +#~ msgstr "Внутренняя ошибка: длина имен (%d) не равна длине dt (%d)" + +#~ msgid "Internal error, tl of class is marked but tl<0." +#~ msgstr "" +#~ "Внутренняя ошибка, TRUELENGTH(<объект data.table>) < 0 («tl of class is " +#~ "marked but tl<0»)." + +#, c-format +#~ msgid "" +#~ "Internal error, please report (including result of sessionInfo()) to data." +#~ "table issue tracker: tl (%d) < l (%d) but tl of class is marked." +#~ msgstr "" +#~ "Внутренняя ошибка; пожалуйста, сообщите (включая результат sessionInfo()) " +#~ "на трекер проблем data.table: у объекта data.table tl (%d) < l (%d) («but " +#~ "tl of class is marked»)." + +#, fuzzy +#~ msgid "" +#~ "Internal error: dt passed to Cassign is not a data.table or data.frame" +#~ msgstr "" +#~ "Внутренняя ошибка: dt, переданное в Cassign, не является таблицей или " +#~ "кадром данных (data.table или data.frame)" + +#, c-format +#~ msgid "" +#~ "Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, " +#~ "coln=%d" +#~ msgstr "" +#~ "Внутренняя ошибка в Assign.c: длина (новые имена столбцов) = %d, длина " +#~ "(имена) = %d, столбец = %d" + +#, c-format +#~ msgid "" +#~ "Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +#~ "issue tracker, including result of sessionInfo()." +#~ msgstr "" +#~ "Внутренняя ошибка: oldtncol(%d) < oldncol(%d). Пожалуйста, сообщите об " +#~ "этом в трекере проблем data.table, включая результат выполнения функции " +#~ "sessionInfo()." + +#, c-format +#~ msgid "" +#~ "Internal error: DT passed to assign has not been allocated enough column " +#~ "slots. l=%d, tl=%d, adding %d" +#~ msgstr "" +#~ "Внутренняя ошибка: DT, переданному в assign, не выделено достаточно " +#~ "слотов для столбцов. l=%d, tl=%d, добавление %d" + +#, c-format +#~ msgid "Internal error: selfrefnames is ok but tl names [%lld] != tl [%d]" +#~ msgstr "" +#~ "Внутренняя ошибка: selfrefnames в порядке, но tl names [%lld] != tl [%d]" + +#~ msgid "" +#~ "Internal error: earlier error 'When deleting columns, i should not be " +#~ "provided' did not happen." +#~ msgstr "" +#~ "Внутренняя ошибка: ранее ошибка 'При удалении столбцов i не должен быть " +#~ "предоставлен' не произошла, хотя должна была." + +#~ msgid "Internal error: Couldn't allocate memory for s4." +#~ msgstr "Внутренняя ошибка: не удалось выделить память для s4." + +#~ msgid "Internal error: Couldn't allocate memory for s5." +#~ msgstr "Внутренняя ошибка: Не удалось выделить память для s5." + +#~ msgid "Internal error: memrecycle has received NULL colname" +#~ msgstr "Внутренняя ошибка: memrecycle получил NULL colname" + +#, c-format +#~ msgid "" +#~ "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" +#~ msgstr "" +#~ "Внутренняя ошибка: функции uniqlist передано length(order)==%d, но nrow=%d" + +#~ msgid "Internal error: nestedid was not passed a list length 1 or more" +#~ msgstr "" +#~ "Внутренняя ошибка: функции nestedid не передан список длиной как минимум 1" + +#, c-format +#~ msgid "Internal error: nrows[%d]>0 but ngrps==0" +#~ msgstr "Внутренняя ошибка: nrows[%d] > 0, но ngrps==0" + +#, c-format +#~ msgid "Internal error: copyAsPlain returning ALTREP for type '%s'" +#~ msgstr "Внутренняя ошибка: copyAsPlain() вернула ALTREP для типа '%s'" diff --git a/vignettes/ru/datatable-importing.Rmd b/vignettes/ru/datatable-importing.Rmd new file mode 100644 index 0000000000..111a783673 --- /dev/null +++ b/vignettes/ru/datatable-importing.Rmd @@ -0,0 +1,470 @@ +--- +title: "Использование data.table в других пакетах" +date: "`r Sys.Date()`" +output: + markdown::html_format +vignette: > + %\VignetteIndexEntry{Использование data.table в других пакетах} + %\VignetteEngine{knitr::knitr} + \usepackage[utf8]{inputenc} +--- + + + +Этот документ рассказывает об использовании `data.table` в качестве +зависимости в других R-пакетах. Если вас интересует использование C-кода +`data.table` в приложениях, не связанных с R, или прямой вызов его +C-функций, перейдите к [последнему разделу](#non-r-api) этого руководства. + +Импортирование `data.table` не отличается от импортирования других пакетов +R. Этот раздел предназначен для ответа на самые распространенные вопросы по +этой теме; представленные здесь уроки могут быть применены и к другим +пакетам R. + +## Зачем импортировать `data.table` + +Одной из главных особенностей `data.table` является его лаконичный +синтаксис, который делает исследовательский анализ быстрее и легче как для +написания, так и для восприятия. Эта удобство может побудить авторов пакетов +использовать `data.table`. Ещё более важной причиной является высокая +производительность. Передавая ресурсоёмкие вычислительные задачи из вашего +пакета в `data.table`, вы получаете максимальную производительность, не +прибегая к созданию собственных методов числовой оптимизации. + +## Импортировать `data.table` просто + +Использовать `data.table` в качестве зависимости очень просто, так как у +`data.table` нет собственных зависимостей. Это касается как операционной +системы, так и зависимостей R. Если у вас установлена R, то на вашем +устройстве уже есть всё необходимое для установки `data.table`. Это также +означает, что добавление `data.table` в качестве зависимости для вашего +пакета не вызовет цепочку других рекурсивных зависимостей, что делает +установку удобной даже в режиме офлайн. + +## Файл `DESCRIPTION` {#DESCRIPTION} + +Первое место для определения зависимостей в пакете - это файл `DESCRIPTION`. Чаще всего вам нужно добавить `data.table` в поле `Imports:`. Это потребует установки `data.table` перед компиляцией/установкой вашего пакета. Как упоминалось выше, никакие другие пакеты устанавливаться не будут, поскольку `data.table` не имеет собственных зависимостей. Вы также можете указать минимально необходимую версию зависимости; например, если ваш пакет использует функцию `fwrite`, которая появилась в `data.table` в версии 1.9.8, вы должны включить это как `Imports: data.table (>= 1.9.8)`. Таким образом, вы сможете убедиться, что установленная версия `data.table` - 1.9.8 или более поздняя, прежде чем ваши пользователи смогут установить ваш пакет. Помимо поля `Imports:`, вы также можете использовать `Depends: data.table`, но мы настоятельно не рекомендуем использовать этот подход (и, возможно, запретим его в будущем), поскольку он загружает `data.table` в рабочее пространство вашего пользователя; то есть, он включает функциональность `data.table` в скрипты ваших пользователей без их запроса. `Imports:` - это правильный способ использовать `data.table` в вашем пакете, не навязывая `data.table` его пользователю. Мы надеемся, что поле `Depends:` в R со временем будет упразднено, поскольку это справедливо для всех пакетов. + +## Файл `NAMESPACE` {#NAMESPACE} + +Следующий шаг - это определить, какие функции из `data.table` использует ваш +пакет. Это нужно сделать в файле `NAMESPACE`. Наиболее часто авторы пакетов +используют `import(data.table)`, что позволит импортировать все +экспортируемые (то есть перечисленные в собственном файле `NAMESPACE` пакета +`data.table`) функции из `data.table`. + +Возможно, вы захотите использовать только часть функций `data.table`; +например, некоторые пакеты могут использовать только высокопроизводительные +функции чтения и записи CSV из `data.table`. В этом случае вы можете +добавить `importFrom(data.table, fread, fwrite)` в ваш файл +`NAMESPACE`. Также возможно импортировать все функции из пакета, _за +исключением_ определенных, используя `import(data.table, except=c(fread, +fwrite))`. + +Не забудьте также ознакомиться с примечанием о нестандартных вычислениях в +`data.table` в разделе [«Неопределенные глобальные переменные»](#globals) + +## Использование + +В качестве примера мы зададим две функции в пакете `a.pkg`, который +использует `data.table`. Одна функция, `gen`, будет генерировать простой +`data.table`; другая, `aggr`, будет выполнять простую агрегацию этой +`data.table`. + +```r +gen = function (n = 100L) { + dt = as.data.table(list(id = seq_len(n))) + dt[, grp := ((id - 1) %% 26) + 1 + ][, grp := letters[grp] + ][] +} +aggr = function (x) { + stopifnot( + is.data.table(x), + "grp" %in% names(x) + ) + x[, .N, by = grp] +} +``` + +## Тестирование + +Обязательно включите тесты в ваш пакет. Перед каждым крупным релизом +`data.table` мы проверяем опубликованные пакеты, которые зависят от нас. Это +означает, что если изменения в `data.table` нарушат ваш код, мы сможем +обнаружить эти проблемы и уведомить вас до выпуска новой версии. Это +предполагает, что вы опубликуете ваш пакет в CRAN или Bioconductor. Самый +базовый тест может быть представлен в виде простого R-скрипта в каталоге +вашего пакета `tests/test.R`: + +```r +library(a.pkg) +dt = gen() +stopifnot(nrow(dt) == 100) +dt2 = aggr(dt) +stopifnot(nrow(dt2) < 100) +``` + +При тестировании вашего пакета вы можете использовать команду `R CMD check +--no-stop-on-test-error`, которая продолжит выполнение после ошибки и +запустит все ваши тесты (в отличие от остановки на первой строке скрипта с +ошибкой). Имейте в виду, что это требует R версии 3.4.0 или выше. + +## Тестирование при помощи `testthat` + +Очень часто для тестирования используется пакет `testthat`. Тестирование +пакета, который импортирует `data.table`, не отличается от тестирования +других пакетов. Пример тестового скрипта `tests/testthat/test-pkg.R`: + +```r +context("pkg tests") + +test_that("generate dt", { expect_true(nrow(gen()) == 100) }) +test_that("aggregate dt", { expect_true(nrow(aggr(gen())) < 100) }) +``` + +Если `data.table` находится в разделе Suggests (но не в Imports), то вам +нужно написать `.datatable.aware=TRUE` в одном из файлов R/*, чтобы избежать +ошибок "объект не найден" при тестировании с помощью +`testthat::test_package` или `testthat::test_check`. + +## Работа с "неопределёнными глобальными функциями или переменными" {#globals} + +Пока что `R CMD check` может выдавать предупреждения при виде нестандартных +вычислений R, используемых при работе с `data.table` (особенно с левой +стороны `:=`) . Во время проверки пакета это приводит к сообщениям `NOTE` +следующего типа: + +``` +* checking R code for possible problems ... NOTE +aggr: no visible binding for global variable 'grp' +gen: no visible binding for global variable 'grp' +gen: no visible binding for global variable 'id' +Undefined global functions or variables: +grp id +``` + +Самый простой способ справиться с этим — предварительно определить эти +переменные в вашем пакете и установить их как `NULL`, при необходимости +добавив комментарий (как это сделано в уточнённой версии функции `gen` +ниже). При возможности также можно использовать вектор символов вместо +символов (как в функции `aggr` ниже): + +```r +gen = function (n = 100L) { + id = grp = NULL # избегаем предупреждений от R CMD check + dt = as.data.table(list(id = seq_len(n))) + dt[, grp := ((id - 1) %% 26) + 1 + ][, grp := letters[grp] + ][] +} +aggr = function (x) { + stopifnot( + is.data.table(x), + "grp" %in% names(x) + ) + x[, .N, by = "grp"] +} +``` + +Случай со специальными символами `data.table` (например, `.SD` и `.N`) и +оператором присвоения (`:=`) немного отличается (см. `?.N` для получения +дополнительной информации, включая полный список таких символов). Вам +следует импортировать те значения, которые вы используете, из пространства +имён `data.table`, чтобы защититься от возможных проблем, если в будущем мы +изменим экспортируемое значение этих символов, например, если вы хотите +использовать `.N`, `.I` и `:=`, минимальный `NAMESPACE` будет содержать: + +```r +importFrom(data.table, .N, .I, ':=') +``` + +Гораздо проще использовать `import(data.table)`, что позволит коду вашего +пакета использовать любой объект, экспортируемый из `data.table`. + +Если вам не мешает, что `id` и `grp` будут зарегистрированы как глобальные +переменные в пространстве имен вашего пакета, вы можете использовать +`?globalVariables`. Учтите, что эти примечания не влияют на код или его +функциональность; если вы не собираетесь публиковать свой пакет, вы можете +их проигнорировать. + +## При работе с `options()` требуется осторожность + +Пакеты R могут использовать систему опций, которые пользователь задаёт при +помощи `options(имя=значение)`. Чтобы узнать значение опции, используют +`getOption("имя", значение_по_умолчанию)`. Аргументы функций по-умолчанию +часто включат вызов `getOption()`, чтобы пользователь знал (из `?fun` или +`args(fun)`), какое имя параметра управляет значением по умолчанию для этого +параметра; например, `fun(..., verbose=getOption("datatable.verbose", +FALSE))`. Все опции `data.table` начинаются с `datatable.`, чтобы не +конфликтовать с параметрами других пакетов. Пользователь просто вызывает +`options(datatable.verbose=TRUE)`, чтобы включить этот режим. Это влияет на +все вызовы функций `data.table`, если явно не указан `verbose=FALSE`; +например, `fun(..., verbose=FALSE)`. + +Механизм опций в R является _глобальным_. Это означает, что если +пользователь устанавливает опцию `data.table` для собственного пользования, +то эта установка также влияет на код в любом пакете, использующем +`data.table`. Для такой опции, как `datatable.verbose`, это желаемое +поведение, поскольку целью является отслеживание и протоколирование всех +операций `data.table`, откуда бы они ни исходили; включение этой опции не +влияет на результаты. Еще одна уникальная для R и полезная на практике опция +— это `options(warn=2)`, которая превращает все предупреждения в ошибки. Её +цель состоит в том, чтобы не пропустить ни одного предупреждения при +практическом использовании кода. Есть 6 опций `datable.print.*` и 3 опции +оптимизации, которые не влияют на результат операций. Однако есть одна опция +`data.table`, которая на него влияет и в данный момент вызывает опасения: +`datatable.nomatch`. Эта опция изменяет выполняемое по-умолчанию соединение +с внешнего на внутреннее. [Внешнее соединение используется по умолчанию, +потому что оно не отбрасывает отсутствующие данные и поэтому считается +безопаснее; кроме того, оно соответствует тому, как имена и индексы работают +в самом R.] Некоторые пользователи предпочитают, чтобы по умолчанию +использовалось внутреннее соединение, и мы предусмотрели для них эту +опцию. Однако пользователь, установивший эту опцию, может непреднамеренно +изменить поведение соединений внутри пакетов, использующих +`data.table`. Соответственно, в версии 1.12.4 (октябрь 2019) при +использовании опции `datatable.nomatch` выводилось сообщение, а начиная с +версии 1.14.2 она теперь игнорируется с предупреждением. Это была +единственная опция `data.table`, вызывавшая подобные опасения. + +## Устранение неполадок + +Если вы столкнулись с проблемами при создании пакета, использующего +`data.table`, убедитесь, что проблема воспроизводится в новой сессии R, +используя консоль R: `R CMD check package.name`. + +Некоторые из наиболее распространенных проблем, с которыми сталкиваются +разработчики, обычно связаны с вспомогательными инструментами, +предназначенными для автоматизации некоторых задач разработки пакета, +например, использование `roxygen` для генерации файла `NAMESPACE` из +метаданных в файлах кода R. Другие связаны с вспомогательными функциями, +которые собирают и проверяют пакет. К сожалению, они иногда непредумышленно +приводят к побочным эффектам, которые могут скрыть источник ваших +проблем. Поэтому перепроверьте наличие импорта в файлах `DESCRIPTION` и +`NAMESPACE` в соответствии с [инструкциями](#DESCRIPTION) +[выше](#NAMESPACE). + +Если Вы не можете воспроизвести возникшие проблемы при сборке и проверке при +помощи R в командной строке, Вы можете попробовать обратиться за поддержкой, +основываясь на прошлых проблемах, с которыми мы сталкивались при +взаимодействии `data.table` с вспомогательными инструментами: +[devtools#192](https://github.com/r-lib/devtools/issues/192) или +[devtools#1472](https://github.com/r-lib/devtools/issues/1472). + +## Лицензия + +Начиная с версии 1.10.5, `data.table` распространяется на условиях Mozilla +Public License (MPL). С причинами перехода с GPL можно ознакомиться +[здесь](https://github.com/Rdatatable/data.table/pull/2456), а подробнее о +MPL Вы можете прочитать в Википедии +[здесь](https://en.wikipedia.org/wiki/Mozilla_Public_License) и +[здесь](https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses). + +## Необязательный импорт `data.table`: Suggests + +Если Вы хотите использовать `data.table` необязательным образом, то есть +только тогда, когда он установлен, вам следует использовать `Suggests: +data.table` в вашем файле `DESCRIPTION` вместо `Imports: data.table`. По +умолчанию, `data.table` не будет установлена при установке Вашего +пакета. Это также потребует от Вас добавления проверок на наличие +`data.table` в код Вашего пакета, что можно сделать с помощью функции +`?requireNamespace`. Приведенный ниже пример демонстрирует условное +использование быстрой записи CSV из `data.table` при помощи функции +`?fwrite`. Если пакет `data.table` не установлен, вместо него используется +гораздо более медленная базовая функция R `?write.table`. + +```r +my.write = function (x) { + if(requireNamespace("data.table", quietly=TRUE)) { + data.table::fwrite(x, "data.csv") + } else { + write.table(x, "data.csv") + } +} +``` + +Несколько более расширенная версия этого способа также гарантирует, что +установленная версия `data.table` является достаточно свежей, чтобы в ней +была доступна функция `fwrite`: + +```r +my.write = function (x) { + if(requireNamespace("data.table", quietly=TRUE) && + utils::packageVersion("data.table") >= "1.9.8") { + data.table::fwrite(x, "data.csv") + } else { + write.table(x, "data.csv") + } +} +``` + +При использовании пакета в качестве предполагаемой зависимости не следует +использовать `import` в файле `NAMESPACE`. Достаточно упомянуть его в файле +`DESCRIPTION`. При использовании функций `data.table` в коде пакета (файлы +`R/*`) необходимо использовать префикс `data.table::`, поскольку ни одна из +них не импортируется. При использовании `data.table` в тестах пакета +(например, в файлах `tests/testthat/test*`) необходимо создать переменную +`.datatable.aware=TRUE` в одном из файлов `R/*`. + +## `data.table` в `Imports`, но функции явно не импортированы + +Некоторые пользователи +([пример](https://github.com/Rdatatable/data.table/issues/2341)) могут +предпочесть отказаться от использования `importFrom` или `import` в файле +`NAMESPACE` и вместо этого использовать полное имя `data.table::*` в своём +коде (разумеется, сохраняя `data.table` в секции `Imports:` файла +`DESCRIPTION`). + +В этом случае неэкспортированная функция `[.data.table` превратится в вызов +`[.data.frame` в качестве меры предосторожности, поскольку `data.table` не +имеет возможности узнать, что родительский пакет осведомлен о том, что он +пытается выполнить вызов синтаксиса API запросов `data.table` (что может +привести к неожиданному поведению, поскольку структура вызовов +`[.data.frame` и `[.data.table` принципиально отличается: например, +последний имеет гораздо больше аргументов). + +Если Вы предпочитаете такой подход к разработке пакетов, задайте переменную +`.datatable.aware = TRUE` в любом месте исходного кода R (экспортировать её +не нужно). Это сообщит `data.table`, что Вы, как разработчик пакета, +спроектировали свой код так, чтобы намеренно полагаться на функциональность +`data.table`, даже если это может быть не очевидно при просмотре вашего +файла `NAMESPACE`. + +`data.table` на лету определяет, знает ли вызывающая функция, что она +обращается к `data.table`, с помощью внутренней функции `cedta` +(«**C**alling **E**nvironment is **D**ata **T**able **A**ware», окружение +вызова функции знает про `data.table`), которая, помимо проверки +`?getNamespaceImports` для вашего пакета, также проверяет существование этой +переменной (и некоторые другие вещи). + +## Дополнительная информация о зависимостях + +Более официальную документацию о зависимостях пакетов и способах их +объявления можно найти в официальном руководстве: [Writing R +Extensions](https://cran.r-project.org/doc/manuals/r-release/R-exts.html). + +## Импорт функций на C из data.table + +Некоторые из внутренне используемых подпрограмм на C теперь экспортированы +для другого кода на C и могут быть использованы в пакетах R непосредственно +из кода на C. Подробнее о том, как это делать, см. в +[`?cdt`](https://rdatatable.gitlab.io/data.table/reference/cdt.html) и в +разделе [Writing R +Extensions](https://cran.r-project.org/doc/manuals/r-release/R-exts.html) +_Linking to native routines in other packages_. + +## Импорт извне R {#non-r-api} + +Некоторые небольшие части Си-кода `data.table` были изолированы от R C API и +теперь могут быть использованы из приложений, не относящихся к R, путем +компоновки с файлами .so / .dll. Более подробная информация об этом будет +предоставлена позже, а пока вы можете изучить Си-код, который был изолирован +от R C API в +[src/fread.c](https://github.com/Rdatatable/data.table/blob/master/src/fread.c) +и +[src/fwrite.c](https://github.com/Rdatatable/data.table/blob/master/src/fwrite.c). + +## Как преобразовать зависимость от data.table из Depends в Imports + +Чтобы преобразовать зависимость Вашего пакета от `data.table` типа `Depends` +в зависимость типа `Imports`, выполните следующие действия: + +### Шаг 0. Убедитесь, что ваш пакет изначально проходит R CMD check + +### Шаг 1. Обновите файл DESCRIPTION, переместив data.table из Depends в Imports + +**До:** +```dcf +Depends: + R (>= 3.5.0), + data.table +Imports: +``` + +**После:** +```dcf +Depends: + R (>= 3.5.0) +Imports: + data.table +``` + +### Шаг 2.1: Выполните команду `R CMD check` + +Запустите `R CMD check`, чтобы выявить недостающие импорты. Этот шаг: + +- Автоматически обнаруживает любые функции или символов из `data.table`, + которые не были импортированы явно. +- Отмечает отсутствующие специальные символы, такие как `.N`, `.SD` и `:=`. +- Сразу же пишет, что нужно добавить в файл NAMESPACE. + +Замечание: `R CMD check` ловит не все подобные случаи использования. В +частности, `R CMD check` пропускает некоторые символы/функции в формулах и +полностью пропустит собранные из текста выражения типа `parse(text = +"data.table(a = 1)")`. Для обнаружения таких краевых случаев пакетам +потребуется хорошее покрытие тестами. + +### Шаг 2.2: Измените файл NAMESPACE + +Основываясь на результатах `R CMD check`, импортируйте из `data.table` все +необходимые функции, специальные символы, общие функции S3 и классы S4. + +Это означает добавление директив `importFrom(data.table, ...)` для символов, +функций и S3-генериков, а при необходимости также директив +`importClassesFrom(data.table, ...)` для S4-классов. Подробности о том, как +правильно это сделать, см. в руководстве "Writing R Extensions". + +#### Полный импорт + +В качестве альтернативы вы можете импортировать всё, что экспортирует +`data.table`, хотя обычно это не рекомендуется: + +```r +import(data.table) +``` + +**Причины, по которым полный импорт лучше не делать:** +1. **Документация**: Файл NAMESPACE может служить хорошей документацией о том, как Ваших зависимостей от других пакетов. +2. **Избежание конфликтов**: Полный импорт может привести к ошибкам, которые сложно диагностировать и исправлять. Например, если вы используете `import(pkgA)` и `import(pkgB)`, но позже `pkgB` экспортирует функцию, которую уже экспортирует `pkgA`, это приведет к поломке вашего пакета из-за конфликтов в вашем пространстве имен, что запрещено `R CMD check` и CRAN. + +### Шаг 3: Обновите файлы кода R вне директории R/ Вашего пакета + +Когда вы перемещаете пакет из `Depends` в `Imports`, он больше не будет +автоматически подключаться при подключении вашего пакета. Это может быть +важно для примеров, тестов, руководств и демо-файлов, где пакеты, указанные +в `Imports`, должны быть подключены явным образом. + +**До (с `Depends`):** +```r +# функции data.table доступны напрямую +library(MyPkgDependsDataTable) +dt <- data.table(x = 1:10, y = letters[1:10]) +setDT(dt) +result <- merge(dt, other_dt, by = "x") +``` + +**После (с использованием `Imports`):** +```r +# Явным образом загрузить data.table в пользовательских скриптах или руководствах пакетов +library(data.table) +library(MyPkgDependsDataTable) +dt <- data.table(x = 1:10, y = letters[1:10]) +setDT(dt) +result <- merge(dt, other_dt, by = "x") +``` + +### Преимущества использования `Imports` +- **Удобство для пользователей**: `Depends` изменяет путь `search()` ваших + пользователей, возможно, без их желания. +- **Управление пространством имен**: Доступны только те функции, которые ваш + пакет явно импортирует, что снижает риск пересечения имен функций. +- **Более чистая загрузка пакетов**: Зависимости вашего пакета не + оказываются внутри `search()`, что делает процесс загрузки чище и + потенциально быстрее. +- **Упрощение обслуживания**: Это упрощает задачи обслуживания по мере + развития API Ваших зависимостей. Слишком сильная зависимость от `Depends` + может со временем привести к конфликтам и проблемам совместимости. diff --git a/vignettes/ru/datatable-intro.Rmd b/vignettes/ru/datatable-intro.Rmd new file mode 100644 index 0000000000..be16e190c2 --- /dev/null +++ b/vignettes/ru/datatable-intro.Rmd @@ -0,0 +1,974 @@ +--- +title: "Введение в data.table" +date: "`r Sys.Date()`" +output: + markdown::html_format +vignette: > + %\VignetteIndexEntry{Введение в data.table} + %\VignetteEngine{knitr::knitr} + \usepackage[utf8]{inputenc} +--- + +```{r, echo = FALSE, message = FALSE} +require(data.table) +knitr::opts_chunk$set( + comment = "#", + error = FALSE, + tidy = FALSE, + cache = FALSE, + collapse = TRUE +) +.old.th = setDTthreads(1) +``` + +Описание пакета `data.table`: его синтаксис, содержание и функции; выбор +подмножества (*subset*) строк, выбор столбцов и проведение на них +арифметических действий (*select and compute*), объединение в группы по +определенному признаку. Опыт использования структуры данных `data.frame` из +базового R будет полезен, но не необходим для понимания описания. + +*** + +## Анализ данных с использованием `data.table` + +Действия манипуляции данных (*subset*, *group*, *update*, *join* и т.д.) +связаны между собой. Объединение этих *родственных действий* позволяет: + +* использовать *краткий* и *последовательный* синтакс независимо от набора + действий, необходимых для достижения конечной цели. + +* свободно проводить анализ данных без необходимости соотнесения каждого + действия с одной из огромного множества функций, доступных перед + проведением анализа. + +* *автоматически* и эффективно оптимизировать действия в зависимости от + данных, к которым применяются эти действия; в результате получается очень + быстрый код с эффективным использованием памяти. + +Вкратце, этот пакет для вас, если вы заинтересованы в радикальном сокращении +времени, затрачиваемого на *написание кода* и *обсчет данных*. Принципы +`data.table` это позволяют, что мы и стремимся продемонстрировать в данном +описании. + +## Данные {#data} + +В этом документе мы используем данные +[NYC-flights14](https://raw.githubusercontent.com/Rdatatable/data.table/master/vignettes/flights14.csv) +из пакета [flights](https://github.com/arunsrinivasan/flights) (доступен +только на GitHub). Он содержит данные о своевременности рейсов от Бюро +транспортной статистики для всех рейсов, вылетевших из аэропортов Нью-Йорка +в 2014 году (вдохновлено +[nycflights13](https://github.com/tidyverse/nycflights13)). Данные доступны +только за период с января по октябрь 2014 года. + +Мы можем использовать функцию чтения файлов `fread` из `data.table`, чтобы +загрузить рейсы (`flights`) следующим образом: + +```{r echo = FALSE} +options(width = 100L) +``` + +```{r} +input <- if (file.exists("../flights14.csv")) { + "../flights14.csv" +} else { + "https://raw.githubusercontent.com/Rdatatable/data.table/master/vignettes/flights14.csv" +} +flights <- fread(input) +flights +dim(flights) +``` + +Примечание: `fread` напрямую поддерживает URL-адреса с `http` и `https`, а +также команды операционной системы, такие как вывод `sed` и `awk`. Примеры +можно найти в справке (`?fread`). + +## Введение + +В этом описании мы + +1. Начнем с основ - что такое `data.table`, его общая структура, как + *выбирать* строки, как *выбирать и вычислять* значения по столбцам; + +2. Затем мы рассмотрим выполнение агрегации данных по группам. + +## 1. Основы {#basics-1} + +### a) Что такое `data.table`? {#what-is-datatable-1a} + +`data.table` — это пакет R, который предоставляет **расширенную версию** +`data.frame`, стандартной структуры данных для хранения данных в базовом +(`base`) R. В разделе [Данные](#data) выше мы увидели, как создать +`data.table` с помощью функции `fread()`, но также можно создать его, +используя функцию `data.table()`. Вот пример: + +```{r} +DT = data.table( + ID = c("b","b","b","a","a","c"), + a = 1:6, + b = 7:12, + c = 13:18 +) +DT +class(DT$ID) +``` + +Вы также можете преобразовать существующие объекты в `data.table` с помощью +`setDT()` (для структур `data.frame` и `list`) или `as.data.table()` (для +других структур). Для получения более подробной информации о различиях +(выходит за рамки этого руководства) обратитесь к `?setDT` и +`?as.data.table`. + +#### Примечания: + +* Номера строк выводятся с `:`, чтобы визуально отделить номер строки от + первого столбца. + +* Когда количество строк для вывода превышает глобальную опцию + `datatable.print.nrows` (по умолчанию `r + getOption("datatable.print.nrows")`), автоматически выводятся только + первые 5 и последние 5 строк (как видно в разделе [Данные](#data)). Для + большого `data.frame` можно заметить, что приходится очень долго ждать, + пока вся таблица будет напечатана. Это ограничение помогает справиться с + данной проблемой, и вы можете узнать число выводимых строк следующим + образом: + + ```{.r} + getOption("datatable.print.nrows") + ``` + +* `data.table` никогда не устанавливает и не использует *имена строк*. Мы + увидим, почему это так, в руководстве + [`vignette("datatable-keys-fast-subset", + package="data.table")`](../datatable-keys-fast-subset.html). + +### b) Общая структура - в чем заключается *усовершенствование* `data.table`? {#enhanced-1b} + +По сравнению с `data.frame`, с использованием оператора `[ ... ]` в рамках +`data.table` можно делать *гораздо больше*, чем просто выбирать строки и +столбцы (примечание: мы также можем называть запись внутри `DT[...]` +«запросом к `DT`», по аналогии с SQL). Для понимания этого сначала нужно +рассмотреть *общую форму* синтаксиса `data.table`, как показано ниже: + +```{r eval = FALSE} +DT[i, j, by] + +## R: i j by +## SQL: where | order by select | update group by +``` + +Для пользователей с опытом работы в SQL этот синтаксис может выглядеть +знакомо. + +#### Прочитать это (вслух) можно так: + +Взять `DT`, выбрать/переставить строки, используя `i`, затем вычислить `j`, +сгруппировав по `by`. + +Начнем с рассмотрения `i` и `j` — выбора строк и операций со столбцами. + +### в) Выбор строк в `i` {#subset-i-1c} + +#### -- Вывести все рейсы, вылетевшие из аэропорта "JFK" в июне. + +```{r} +ans <- flights[origin == "JFK" & month == 6L] +head(ans) +``` + +* В рамках `data.table` к столбцам можно обращаться, *как если бы они были + переменными*, как в SQL или Stata. Поэтому мы просто ссылаемся на `origin` + и `month`, как на переменные. Не нужно добавлять префикс `flights$` каждый + раз. Тем не менее, `flights$origin` и `flights$month` также будет работать + без проблем. + +* Вычисляются *индексы строк*, удовлетворяющие условию `origin == "JFK" & + month == 6L`, и, поскольку больше ничего не требуется делать, все столбцы + из `flights` в строках, соответствующих этим *индексам строк*, просто + возвращаются как `data.table`. + +* Запятая после условия в `i` не требуется, тем не менее, `flights[origin == + "JFK" & month == 6L, ]` тоже будет работать без проблем. В `data.frame`, + однако, запятая обязательна. + +#### -- Вывести первые две строки из `flights`. {#subset-rows-integer} + +```{r} +ans <- flights[1:2] +ans +``` + +* В этом случае условия нет. Индексы строк уже указаны в `i`. Поэтому + возвращается `data.table` со всеми столбцами из `flights` в строках, + соответствующих этим *индексам строк*. + +#### -- Отсортировать `flights` по столбцу `origin` в *возрастающем* порядке, а затем по столбцу `dest` в *убывающем* порядке: + +Для этого мы можем использовать функцию R `order()`. + +```{r} +ans <- flights[order(origin, -dest)] +head(ans) +``` + +#### `order()` оптимизировано внутри функции + +* Мы можем использовать "-" для столбцов типа `character` в рамках + `data.table` для сортировки в порядке убывания. + +* Кроме того, `order(...)` в рамках `data.table` использует внутреннюю + быструю сортировку `forder()`. Эта сортировка показала настолько + значительное улучшение по сравнению с `base::order` в R, что проект R + принял алгоритм `data.table` как стандартный способ сортировки начиная с + версии R 3.3.0 в 2016 году (для справки см. `?sort` и [R Release + NEWS](https://cran.r-project.org/doc/manuals/r-release/NEWS.pdf)). + +Мы более подробно обсудим быструю сортировку `data.table` в руководстве +*`data.table` internals*. + +### d) Выбрать столбец/столбцы в `j` {#select-j-1d} + +#### -- Выбрать столбец `arr_delay`, но вывести его как *вектор*. + +```{r} +ans <- flights[, arr_delay] +head(ans) +``` + +* Поскольку к столбцам можно обращаться как к переменным в рамках + `data.table`, мы напрямую ссылаемся на *переменную*, по которой хотим + выбрать строки. Поскольку нам нужны *все строки*, мы просто пропускаем + `i`. + +* Это возвращает *все* строки из столбца `arr_delay`. + +#### -- Выбрать столбец `arr_delay` и вернуть его в виде `data.table`. + +```{r} +ans <- flights[, list(arr_delay)] +head(ans) +``` + +* Мы оборачиваем *переменные* (имена столбцов) в `list()`, что позволяет + получить в ответ объект `data.table`. При выборе одного столбца, не + обёрнутого в `list()`, будет возвращён один вектор, как в [предыдущем + примере](#select-j-1d). + +* `data.table` также позволяет заворачивать столбцы в `.()` вместо + `list()`. Это *синоним* для `list()`: эти конструкции значат одно и то + же. Используйте ту, которая кажется более удобной; далее мы будем + использовать `.()` для краткости. + +`data.table` (как и `data.frame`) также является списком (`list`) с +условием, что у него есть атрибут `class`, а каждый его элемент имеет +одинаковую длину. Возможность возвращать `list` с помощью `j` позволяет +эффективно преобразовывать и возвращать `data.table`. + +#### Подсказка: {#tip-1} + +Пока выражение `j` возвращает список (`list`), каждый элемент списка будет +преобразован в столбец в результирующем `data.table`. Это делает `j` очень +мощным инструментом, как мы скоро увидим. Также это очень важно понимать, +когда вы захотите составлять более сложные запросы. + +#### -- Выбрать оба столбца: `arr_delay` и `dep_delay`. + +```{r} +ans <- flights[, .(arr_delay, dep_delay)] +head(ans) + +## другой вариант +# ans <- flights[, list(arr_delay, dep_delay)] +``` + +* Оберните оба столбца в `.()` или `list()`. Этого достаточно. + +#### -- Выбрать оба столбца: `arr_delay` и `dep_delay`, *и* переименовать их в `delay_arr` и `delay_dep`. + +Поскольку `.()` — это просто псевдоним для `list()`, мы можем присваивать +имена столбцам так же, как при создании `list`. + +```{r} +ans <- flights[, .(delay_arr = arr_delay, delay_dep = dep_delay)] +head(ans) +``` + +### е) Вычисление или *выполнение* в `j` + +#### -- Сколько рейсов имели общую задержку < 0? + +```{r} +ans <- flights[, sum( (arr_delay + dep_delay) < 0 )] +ans +``` + +#### Что здесь происходит? + +* `j` в `data.table` может выполнять не только *выбор столбцов*, но и + *выражения*, то есть *вычисления на основе столбцов*. Это неудивительно, + так как столбцы можно рассматривать как переменные. Следовательно, мы + можем *вычислять* значения, вызывая функции для этих переменных. Именно + это мы здесь и делаем. + +### ж) Выбор в `i` *и* выполнение в `j` + +#### -- Рассчитать среднее время задержки прибытия и отправления для всех рейсов, вылетевших из аэропорта "JFK" в июне. + +```{r} +ans <- flights[origin == "JFK" & month == 6L, + .(m_arr = mean(arr_delay), m_dep = mean(dep_delay))] +ans +``` + +* Сначала мы выбираем строки в `i`, чтобы найти соответствующие *индексы + строк*, в которых аэропорт `origin` равен `"JFK"`, а `month` равен + `6L`. Мы _пока_ *не* выбираем _целый_ `data.table`, соответствующий этим + строкам. + +* Теперь мы видим, что в `j` используется только *два столбца*. Нам нужно + вычислить их `mean()`. Поэтому мы выбираем только те столбцы, которые + соотносятся с соответствующими строками, и вычисляем их `mean()`. + +Поскольку три основные компонента запроса (`i`, `j` и `by`) находятся +*вместе* внутри `[...]`, `data.table` видит все три и может оптимизировать +запрос целиком *до выполнения*, а не оптимизировать каждый компонент +отдельно. Таким образом, мы можем избежать выбора всего набора данных (то +есть, выбора столбцов _кроме_ `arr_delay` и `dep_delay`), что повышает как +скорость, так и эффективность использования памяти. + +#### -- Сколько рейсов было вылетело в 2014 году из аэропорта "JFK" в июне? + +```{r} +ans <- flights[origin == "JFK" & month == 6L, length(dest)] +ans +``` + +Функция `length()` требует аргумента. Нам нужно вычислить количество строк в +выбранном подмножестве. Мы могли бы использовать любой другой столбец в +качестве аргумента для `length()`. Этот подход напоминает `SELECT +COUNT(dest) FROM flights WHERE origin = 'JFK' AND month = 6` в SQL. + +Этот тип действий встречается довольно часто, особенно при группировке (как +мы увидим в следующем разделе), и поэтому `data.table` предоставляет +*специальный символ* `.N` для этого. + +### з) Обработка несуществующих элементов в `i` + +#### -- Что происходит при запросе несуществующих элементов? + +При запросе `data.table` для элементов, которые не существуют, поведение +зависит от используемого метода. + +```r +setkeyv(flights, "origin") +``` + +* **Выбор на основе ключа: `dt["d"]`** + + Это выполняет правое соединение по ключевому столбцу `x`, в результате чего получается строка с `d` и `NA` для столбцов, которые не найдены. При использовании `setkeyv` таблица сортируется по указанным ключам и создается внутренний индекс, позволяющий выполнять бинарный поиск для эффективного выбора подмножеств. + + ```r + flights["XYZ"] + # Возвращает: + # origin year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum ... + # 1: XYZ NA NA NA NA NA NA NA NA NA NA NA NA ... + ``` + +* **Логический выбор: `dt[x == "d"]`** + + Это выполняет стандартную операцию выбора, которая не находит совпадающих строк и, следовательно, возвращает пустой `data.table`. + + ```r + flights[origin == "XYZ"] + # Возвращает: + # Empty data.table (0 rows and 19 cols): year,month,day,dep_time,sched_dep_time,dep_delay,arr_time,sched_arr_time,arr_delay,... + ``` + +* **Точное соответствие с использованием `nomatch=NULL`** + + Для точного соответствия без `NA` для несуществующих элементов используйте `nomatch=NULL`: + + ```r + flights["XYZ", nomatch=NULL] + # Возвращает: + # Empty data.table (0 rows and 19 cols): year,month,day,dep_time,sched_dep_time,dep_delay,arr_time,sched_arr_time,arr_delay,... + ``` + +Понимание этих особенностей поможет избежать путаницы при работе с +несуществующими элементами в ваших данных. + +#### Специальный символ `.N`: {#special-N} + +`.N` — это специальная встроенная переменная, которая содержит количество +наблюдений _в текущей группе_. Она особенно полезна при использовании с +`by`, как мы увидим в следующем разделе. В отсутствие операций группировки +она просто возвращает количество строк в выбранном подмножестве. + +Теперь, когда мы знаем это, мы можем выполнить ту же задачу, используя `.N`, +следующим образом: + +```{r} +ans <- flights[origin == "JFK" & month == 6L, .N] +ans +``` + +* Снова выбираем строки в `i`, чтобы получить *индексы строк*, где аэропорт + `origin` равен *"JFK"*, а `month` равен *6*. + +* Мы видим, что в `j` используется только `.N` и никакие другие + столбцы. Поэтому подмножество не отображается целиком. Мы просто + возвращаем количество строк в подмножестве (что эквивалентно длине + индексов строк). + +* Обратите внимание, что мы не оборачивали `.N` в `list()` или + `.()`. Поэтому возвращается вектор. + +Мы могли бы выполнить то же действие, используя `nrow(flights[origin == +"JFK" & month == 6L])`. Однако сначала нужно было бы выбрать весь +`data.table`, соответствующий *индексам строк* в `i`, а затем возвращать +количество строк с помощью `nrow()`, что является ненужным и +неэффективным. Мы подробно рассмотрим это и другие аспекты оптимизации в +руководстве *дизайн `data.table`*. + +### и) Отлично! Но как я могу ссылаться на столбцы по именам в `j` (как в `data.frame`)? {#refer-j} + +Если вы явно указываете имена столбцов, разницы по сравнению с `data.frame` +нет (начиная с версии 1.9.8). + +#### -- Выбрать оба столбца: `arr_delay` и `dep_delay` способом `data.frame`. + +```{r j_cols_no_with} +ans <- flights[, c("arr_delay", "dep_delay")] +head(ans) +``` + +Если вы сохранили нужные столбцы в векторе символов, есть два варианта: +использовать префикс `..` или использовать аргумент `with`. + +#### -- Выбрать столбцы по именам из переменной, используя префикс `..` + +```{r j_cols_dot_prefix} +select_cols = c("arr_delay", "dep_delay") +flights[ , ..select_cols] +``` + +Знакомым с терминалом Unix префикс `..` напоминает команду "на уровень +выше", что аналогично происходящему здесь — `..` указывает `data.table` +искать переменную `select_cols` "на уровне выше", то есть, в данном случае, +в глобальном пространстве переменных. + +#### -- Выбрать столбцы по именам из переменной, используя `with = FALSE` + +```{r j_cols_with} +flights[ , select_cols, with = FALSE] +``` + +Аргумент называется `with`, как и функция R `with()`, из-за схожей функциональности. Допустим, у вас есть `data.frame` `DF`, и вы хотите выбрать все строки, где `x > 1`. В `base` R вы можете сделать следующее: + +```{r} +DF = data.frame(x = c(1,1,1,2,2,3,3,3), y = 1:8) + +## (1) обычный способ +DF[DF$x > 1, ] # для data.frame эта запятая также понадобится + +## (2) с использованием with() +DF[with(DF, x > 1), ] +``` + +* Использование `with()` в (2) позволяет обращаться к столбцу `x` в `DF`, + как если бы это была переменная. + + Поэтому аргумент называется `with` в `data.table`. Установка `with = FALSE` отключает возможность ссылаться на столбцы как на переменные, возвращая режим "`data.frame`". + +* Мы также можем *исключить* столбцы, используя `-` или `!`. Например: + + ```{r eval = FALSE} + ## этот код не выполняется + + # вернуть все столбцы, кроме arr_delay и dep_delay + ans <- flights[, !c("arr_delay", "dep_delay")] + # либо + ans <- flights[, -c("arr_delay", "dep_delay")] + ``` + +* Начиная с версии `v1.9.5+`, мы также можем выбирать столбцы, указывая + начальное и конечное имена столбцов, например, `year:day` для выбора + первых трёх столбцов. + + ```{r eval = FALSE} + ## этот код не выполняется + + # вернуть year, month, day + ans <- flights[, year:day] + # вернуть day, month, year + ans <- flights[, day:year] + # вернуть все столбцы, кроме year, month, day + ans <- flights[, -(year:day)] + ans <- flights[, !(year:day)] + ``` + + Это особенно удобно при работе в интерактивном режиме. + +`with = TRUE` в `data.table` является значением по умолчанию, поскольку это +позволяет `j` обрабатывать выражения — особенно в сочетании с `by`, как мы +вскоре увидим. + +## 2. Объединения + +Мы уже рассмотрели `i` и `j` в общем виде `data.table` в предыдущем +разделе. В этом разделе мы увидим, как их можно объединить с `by`, чтобы +выполнять действия *по группам*. Давайте рассмотрим несколько примеров. + +### а) Группировка с использованием `by` + +#### -- Как узнать количество рейсов, соответствующих каждому аэропорту отправления? + +```{r} +ans <- flights[, .(.N), by = .(origin)] +ans + +## либо со строковым вектором в 'by' +# ans <- flights[, .(.N), by = "origin"] +``` + +* Нам известно, что `.N` [является специальной переменной](#special-N), + которая содержит количество строк в текущей группе. Группировка по + `origin` позволяет получить количество строк, `.N`, для каждой группы. + +* Выполнив `head(flights)`, вы увидите, что аэропорты отправления + упорядочены как *"JFK"*, *"LGA"*, и *"EWR"*. Исходный порядок переменных + группировки сохраняется. _Это важно помнить._ + +* Поскольку мы не указали имя для столбца, возвращаемого в `j`, он был + автоматически назван `N`, поскольку был распознан специальный символ `.N`. + +* `by` также принимает вектор символов с именами столбцов. Это особенно + полезно для программного кодирования, например, при создании функции с + колонками группировки (в виде вектора символов) в качестве аргумента + функции. + +* Когда есть только один столбец или выражение, на которое нужно ссылаться в + `j` и `by`, мы можем опустить обозначение `.()`. Это сделано только для + удобства. Вместо этого можно сделать: + + ```{r} + ans <- flights[, .N, by = origin] + ans + ``` + + Мы будем использовать эту более удобную форму и в дальнейших случаях, где она будет применима. + +#### -- Как рассчитать количество рейсов для каждого аэропорта отправления для кода перевозчика `"AA"`? {#origin-N} + +Уникальный код перевозчика `"AA"` соответствует *American Airlines Inc.* + +```{r} +ans <- flights[carrier == "AA", .N, by = origin] +ans +``` + +* Сначала мы получаем индексы строк для выражения `carrier == "AA"` из `i`. + +* Используя эти *индексы строк*, мы получаем количество строк при + группировке по `origin`. Опять же, никакие столбцы здесь не отображаются, + поскольку `j-выражение` не требует фактической выборки столбцов, что + делает данное действие быстрым и экономит память. + +#### -- Как получить общее количество рейсов для каждой пары `origin, dest` для кода перевозчика `"AA"`? {#origin-dest-N} + +```{r} +ans <- flights[carrier == "AA", .N, by = .(origin, dest)] +head(ans) + +## или, как вариант, с использованием вектора символов в `by` +# ans <- flights[carrier == "AA", .N, by = c("origin", "dest")] +``` + +* `by` может принимать несколько столбцов. Мы просто указываем все столбцы, + по которым нужно сгруппировать данные. Обратите внимание на использование + `.()` в `by` — это всего лишь сокращение для `list()`, и вместо него здесь + также можно использовать `list()`. В этом руководстве мы будем + придерживаться `.()`. + +#### -- Как получить среднюю задержку прибытия и отправления для каждой пары `origin, dest` для каждого месяца для кода перевозчика `"AA"`? {#origin-dest-month} + +```{r} +ans <- flights[carrier == "AA", + .(mean(arr_delay), mean(dep_delay)), + by = .(origin, dest, month)] +ans +``` + +* Поскольку мы не задали имена для столбцов в выражениях `j`, они были + автоматически сгенерированы как `V1` и `V2`. + +* Еще раз обратите внимание, что порядок указания столбцов группировки в + результате сохраняется. + +Что если мы захотим отсортировать результат по столбцам группировки +`origin`, `dest` и `month`? + +### b) Сортировка по `by`: `keyby` + +`data.table` намеренно сохраняет исходный порядок групп. В некоторых случаях +сохранение исходного порядка является важным. Однако иногда нам необходимо +автоматически отсортировать данные по переменным, которые используются для +группировки. + +#### -- Тогда как же мы можем отсортировать данные по всем переменным группировки напрямую? + +```{r} +ans <- flights[carrier == "AA", + .(mean(arr_delay), mean(dep_delay)), + keyby = .(origin, dest, month)] +ans +``` + +* Все, что мы сделали, это заменили `by` на `keyby`. Это автоматически + сортирует результат по переменным группировки в порядке возрастания. На + самом деле, из-за внутренней реализации `by`, которая сначала требует + сортировки перед восстановлением исходного порядка таблицы, `keyby` обычно + работает быстрее, так как не требует этого второго шага. + +**Ключи сортировки:** На самом деле `keyby` делает немного больше, чем просто сортировка. Он также *устанавливает ключ* после сортировки, добавляя атрибут с названием `sorted`. + +Мы подробнее рассмотрим `keys` в руководстве +[`vignette("datatable-keys-fast-subset", +package="data.table")`](../datatable-keys-fast-subset.html). Пока что вам +нужно знать, что вы можете использовать `keyby`, чтобы автоматически +отсортировать результат по столбцам, указанным в `by`. + +### c) Цепочки вызовов + +Давайте ещё раз рассмотрим задачу [получения общего количества рейсов для +каждой пары `origin, dest` для перевозчика *"AA"*](#origin-dest-N). + +```{r} +ans <- flights[carrier == "AA", .N, by = .(origin, dest)] +``` + +#### -- Как мы можем отсортировать `ans` по столбцу `origin` в порядке возрастания и по столбцу `dest` в порядке убывания? + +Мы можем сохранить промежуточный результат в переменной, а затем +использовать `order(origin, -dest)` для этой переменной. Это выглядит +довольно просто. + +```{r} +ans <- ans[order(origin, -dest)] +head(ans) +``` + +* Вспомним, что мы можем использовать `-` для столбца `character` в функции + `order()` в рамках `data.table`. Это возможно благодаря внутренней + оптимизации запросов в `data.table`. + +* Также вспомним, что `order(...)` в рамках `data.table` *автоматически + оптимизируется* для использования внутреннего быстрого алгоритма + сортировки `forder()` для повышения скорости. + +Но это требует присваивания промежуточного результата и последующей его +замены. Мы можем сделать лучше и избежать этого промежуточного присваивания +временной переменной, используя *цепочки вызовов*. + +```{r} +ans <- flights[carrier == "AA", .N, by = .(origin, dest)][order(origin, -dest)] +head(ans, 10) +``` + +* Мы можем соединять выражения одно за другим, *формируя цепочку* действий, + то есть `DT[ ... ][ ... ][ ... ]`. + +* Либо вы можете также соединять их вертикально: + + ```{r eval = FALSE} + DT[ ... + ][ ... + ][ ... + ] + ``` + +### d) Выражения в `by` + +#### -- Может ли `by` принимать *выражения*, или он принимает только столбцы? + +Да, может. Например, если мы хотим узнать, сколько рейсов вылетели с +опозданием, но прибыли раньше (или вовремя), вылетели и прибыли с опозданием +и т.д. + +```{r} +ans <- flights[, .N, .(dep_delay>0, arr_delay>0)] +ans +``` + +* Последняя строка соответствует `dep_delay > 0 = TRUE` и `arr_delay > 0 = + FALSE`. Мы видим, что `r flights[!is.na(arr_delay) & !is.na(dep_delay), + .N, .(dep_delay>0, arr_delay>0)][, N[4L]]` рейсы вылетели с опозданием, но + прибыли раньше (или вовремя). + +* Обратите внимание, что мы не задали имена для `by-expression`. Поэтому + имена были присвоены автоматически. Как и в случае с `j`, вы можете + назвать эти выражения так же, как и для элементов любого `list`, например, + `DT[, .N, .(dep_delayed = dep_delay>0, arr_delayed = arr_delay>0)]`. + +* Вы можете предоставить другие столбцы вместе с выражениями, например: + `DT[, .N, by = .(a, b>0)]`. + +### e) Множественные столбцы в `j` - `.SD` + +#### -- Нужно ли вычислять `mean()` для каждого столбца по отдельности? + +Конечно, неудобно набирать `mean(myCol)` для каждого столбца по +отдельности. Что если у вас 100 столбцов, для которых нужно вычислить +`mean()`? + +Как сделать это эффективно и лаконично? Для этого вспомните [этот +совет](#tip-1) - *"Если выражение в `j` возвращает `list`, каждый элемент +списка будет преобразован в столбец в результирующем `data.table`"*. Если мы +можем ссылаться на *подмножество данных для каждой группы* как на переменную +*во время группировки*, мы можем использовать уже знакомую базовую функцию +`lapply()` для обработки всех столбцов этой переменной. Никаких новых +названий, специфичных для `data.table`, учить не нужно. + +#### Специальный символ `.SD`: {#special-SD} + +`data.table` предоставляет специальный символ `.SD`, который означает +подмножество данных (**S**ubset of **D**ata). Это `data.table`, который +содержит данные для *текущей группы*, определенной с помощью `by`. + +Помните, что `data.table` внутренне является `list`, в котором все столбцы +имеют одинаковую длину. + +Давайте используем [`data.table` DT из предыдущего +примера](#what-is-datatable-1a), чтобы увидеть, как выглядит `.SD`. + +```{r} +DT + +DT[, print(.SD), by = ID] +``` + +* `.SD` содержит все столбцы, *кроме столбцов группировки* по умолчанию. + +* Он также создаётся с сохранением оригинального порядка — сначала данные + для `ID = "b"`, затем `ID = "a"`, и наконец `ID = "c"`. + +Для выполнения вычислений на (многих) столбцах можно использовать базовую +функцию R `lapply()`. + +```{r} +DT[, lapply(.SD, mean), by = ID] +``` + +* `.SD` содержит строки, соответствующие столбцам `a`, `b` и `c` для данной + группы. Мы вычисляем `mean()` для каждой из этих колонок, используя уже + знакомую функцию `lapply()` из базового R. + +* Каждая группа возвращает список из трёх элементов с вычисленными средними + значениями, которые становятся столбцами в результирующем `data.table`. + +* Поскольку `lapply()` возвращает `list`, то нет необходимости оборачивать + его дополнительным `.()` (при необходимости обратитесь к [этой + подсказке](#tip-1)). + +Мы почти закончили. Осталось прояснить только одну вещь. В нашем +`data.table` `flights` мы хотели рассчитать `mean()` только для двух +столбцов - `arr_delay` и `dep_delay`. Однако по умолчанию `.SD` будет +содержать все столбцы, кроме группирующих переменных. + +#### -- Как указать только те столбцы, для которых мы хотим вычислить `mean()`? + +#### .SDcols + +С помощью аргумента `.SDcols`. Он принимает как имена столбцов, так и их +индексы. Например, `.SDcols = c("arr_delay", "dep_delay")` гарантирует, что +`.SD` будет содержать только эти два столбца для каждой группы. + +Аналогично [пункту и)](#refer-j), вы также можете указать столбцы для +удаления вместо столбцов для сохранения, используя `-` или `!`. Также можно +выбирать последовательные столбцы как `colA:colB` и исключать их как +`!(colA:colB)` или `-(colA:colB)`. + +Теперь давайте попробуем использовать `.SD` вместе с `.SDcols`, чтобы +вычислить `mean()` для столбцов `arr_delay` и `dep_delay`, сгруппированных +по `origin`, `dest` и `month`. + +```{r} +flights[carrier == "AA", ## Для перелётов авиакомпанией "AA": + lapply(.SD, mean), ## посчитать среднее + by = .(origin, dest, month), ## для каждой комбинации 'origin,dest,month' + .SDcols = c("arr_delay", "dep_delay")] ## для столбцов, указанных в .SDcols +``` + +### f) Подмножество `.SD` для каждой группы: + +#### -- Как вернуть первые две строки для каждого месяца? + +```{r} +ans <- flights[, head(.SD, 2), by = month] +head(ans) +``` + +* `.SD` — это `data.table`, который содержит все строки для *этой + группы*. Мы просто выбираем первые две строки, как уже обсуждалось + [здесь](#subset-rows-integer). + +* Для каждой группы `head(.SD, 2)` возвращает первые две строки в виде + `data.table`, который также является `list`, поэтому нет необходимости + оборачивать его в `.()`. + +### g) Почему `j` настолько многофункционален? + +Таким образом мы обеспечиваем консистентный синтаксис и продолжаем +использовать уже существующие (и знакомые) базовые функции, вместо того +чтобы изучать новые. Для иллюстрации используем `data.table` `DT`, который +мы создали в самом начале в разделе [Что такое +data.table?](#what-is-datatable-1a). + +#### -- Как мы можем объединить столбцы `a` и `b` для каждой группы в `ID`? + +```{r} +DT[, .(val = c(a,b)), by = ID] +``` + +* Вот и всё. Не требуется никакого специального синтаксиса. Всё, что нам + нужно знать, это базовая функция `c()`, которая объединяет векторы, и + [предыдущий совет](#tip-1). + +#### -- Что если мы хотим, чтобы все значения столбцов `a` и `b` были объединены, но возвращены как столбец-список? + +```{r} +DT[, .(val = list(c(a,b))), by = ID] +``` + +* Здесь мы сначала объединяем значения с помощью `c(a,b)` для каждой группы, + а затем оборачиваем это в `list()`. Таким образом, для каждой группы мы + возвращаем список всех объединённых значений. + +* Обратите внимание, что запятые здесь используются только для + отображения. Столбец типа "список" может содержать любые объекты в каждой + ячейке, и в этом примере каждая ячейка сама по себе является вектором, + причём некоторые ячейки содержат более длинные векторы, чем другие. + +Когда вы начнёте привыкать к использованию синтаксиса в `j`, вы поймёте, +насколько это мощный инструмент. Чтобы попрактиковаться с ним и попробовать +разные вещи, вы можете поэкспериментировать с помощью функции `print()`. + +Например: + +```{r} +## обратите внимание на разницу между +DT[, print(c(a,b)), by = ID] # (1) + +## и +DT[, print(list(c(a,b))), by = ID] # (2) +``` + +В случае (1) для каждой группы возвращается по вектору вектор, длины которых +равны 6, 4, 2. Однако (2) возвращает список длиной 1 для каждой группы, где +первый элемент содержит векторы длиной 6, 4, 2. Поэтому (1) даёт общую длину +`6 + 4 + 2 = `r 6+4+2``, тогда как (2) возвращает `1 + 1 + 1 = `r 1+1+1``. + +При помощи аргумента `j` можно поместить внутрь data.table любой список. +Например, при построении статистических моделей на группах строк список с +этими моделями может стать столбцом data.table. Такой код лаконичен и легко +читается. + +```{r} +## Удаётся ли дальним перелётам сократить отставание лучше, чем ближним? +## Различается ли сокращение отставания по месяцам? +flights[, `:=`(makeup = dep_delay - arr_delay)] + +makeup.models <- flights[, .(fit = list(lm(makeup ~ distance))), by = .(month)] +makeup.models[, .(coefdist = coef(fit[[1]])[2], rsq = summary(fit[[1]])$r.squared), by = .(month)] +``` +С использованием data.frame требуется более сложный код, чтобы добиться +такого же результата. +```{r} +setDF(flights) +flights.split <- split(flights, f = flights$month) +makeup.models.list <- lapply(flights.split, function(df) c(month = df$month[1], fit = list(lm(makeup ~ distance, data = df)))) +makeup.models.df <- do.call(rbind, makeup.models.list) +sapply(makeup.models.df[, "fit"], function(model) c(coefdist = coef(model)[2], rsq = summary(model)$r.squared)) |> t() |> data.frame() +setDT(flights) +``` + +## Подведение итогов + +Общий синтаксис `data.table` выглядит следующим образом: + +```{r eval = FALSE} +DT[i, j, by] +``` + +Как мы теперь видим, + +#### Использование `i`: + +* Мы можем выбирать строки аналогично `data.frame`, но при этом не нужно + повторно использовать `DT$`, так как столбцы в рамках `data.table` + рассматриваются как *переменные*. + +* Мы также можем сортировать `data.table` с помощью `order()`, который + внутренне использует быстрый метод сортировки `data.table` для повышения + производительности. + +Мы можем сделать гораздо больше в `i`, установив ключи для `data.table`, что +позволит нам очень быстро извлекать подмножества и выполнять соединения. Мы +рассмотрим это в разделах [`vignette("datatable-keys-fast-subset", +package="data.table")`](../datatable-keys-fast-subset.html) и +[`vignette("datatable-joins", +package="data.table")`](../datatable-joins.html). + +#### Использование `j`: + +1. Выберите столбцы способом `data.table`: `DT[, .(colA, colB)]`. + +2. Выберите столбцы способом `data.frame`: `DT[, c("colA", "colB")]`. + +3. Выполните вычисления по столбцам: `DT[, .(sum(colA), mean(colB))]`. + +4. Укажите имена, если это необходимо: `DT[, .(sA = sum(colA), mB = + mean(colB))]`. + +5. Сочетание с `i`: `DT[colA > value, sum(colB)]`. + +#### Использование `by`: + +* Используя `by`, мы можем группировать по столбцам, указывая *список + столбцов*, *вектор имен столбцов* или даже *выражения*. Гибкость `j`, в + сочетании с `by` и `i`, делает синтаксис очень многофункциональным. + +* `by` может обрабатывать несколько столбцов, а также *выражения*. + +* Мы можем использовать `keyby` для группировки по столбцам, чтобы + автоматически сортировать результат группировки. + +* Мы можем использовать `.SD` и `.SDcols` в `j`, чтобы работать с + несколькими столбцами, используя уже знакомые базовые функции. Вот + несколько примеров: + + 1. `DT[, lapply(.SD, fun), by = ..., .SDcols = ...]` - применяет `fun` + ко всем столбцам, указанным в `.SDcols`, при группировке по столбцам, + указанным в `by`. + + 2. `DT[, head(.SD, 2), by = ...]` - возвращает первые две строки для + каждой группы. + + 3. `DT[col > val, head(.SD, 1), by = ...]` - объединяет `i` с `j` и + `by`. + +#### Также не забывайте: + +Если `j` возвращает `list`, каждый элемент этого списка станет столбцом в +результирующей `data.table`. + +В [следующем руководстве (`vignette("datatable-reference-semantics", +package="data.table")`)](../datatable-reference-semantics.html) мы +рассмотрим, как *добавлять/обновлять/удалять* столбцы *по ссылке* и как +комбинировать эти операции с `i` и `by`. + +*** + +```{r, echo=FALSE} +setDTthreads(.old.th) +``` diff --git a/vignettes/ru/datatable-reshape.Rmd b/vignettes/ru/datatable-reshape.Rmd new file mode 100644 index 0000000000..ad5bebe170 --- /dev/null +++ b/vignettes/ru/datatable-reshape.Rmd @@ -0,0 +1,386 @@ +--- +title: "Быстрое изменение формы данных с помощью data.table" +date: "`r Sys.Date()`" +output: + markdown::html_format +vignette: > + %\VignetteIndexEntry{Быстрое изменение формы данных с помощью data.table} + %\VignetteEngine{knitr::knitr} + \usepackage[utf8]{inputenc} +--- + +```{r, echo = FALSE, message = FALSE} +require(data.table) +knitr::opts_chunk$set( + comment = "#", + error = FALSE, + tidy = FALSE, + cache = FALSE, + collapse = TRUE) +.old.th = setDTthreads(1) +``` + +В этом руководстве рассматривается стандартное использование функций +изменения формы данных `melt` (из широкой в длинную) и `dcast` (из длинной в +широкую) для класса *data.table*, а также **новые расширенные возможности** +«расплавления» и «отлива» для *нескольких столбцов*, доступные с `v1.9.6`. + +*** + +```{r echo = FALSE} +options(width = 100L) +``` + +## Данные + +Мы будем загружать наборы данных непосредственно по ходу текста. + +## Введение + +Функции `melt` и `dcast` для `data.table` предназначены для изменения формы +таблиц между «длинными» и «широкими»; реализации специально разработаны с +учетом больших данных в памяти (например, 10 ГБ). + +В этом описании мы + +1. Сначала кратко рассмотрим стандартные операции `melt` и `dcast` для + `data.table`, чтобы преобразовать их из широкого формата в длинный и + _наоборот_ + +2. Рассмотрим сценарии, в которых текущие функции становятся громоздкими и + неэффективными + +3. Наконец, обратим внимание на новые улучшения методов `melt` и `dcast`, + позволяющие обрабатывать несколько столбцов таблиц `data.table` + одновременно. + +Расширенная функциональность соответствует философии `data.table`, которая +заключается в эффективном и понятном выполнении операций. + +## 1. Функциональность по умолчанию + +### a) «плавление» данных в таблице (от широких к длинным) + +Предположим, у нас есть `data.table` (заполненная искусственными данными), +как показано ниже: + +```{r} +s1 <- "family_id age_mother dob_child1 dob_child2 dob_child3 +1 30 1998-11-26 2000-01-29 NA +2 27 1996-06-22 NA NA +3 26 2002-07-11 2004-04-05 2007-09-02 +4 32 2004-10-10 2009-08-27 2012-07-21 +5 29 2000-12-05 2005-02-28 NA" +DT <- fread(s1) +DT +## dob значит "дата рождения" (date of birth). + +str(DT) +``` + + +#### — Преобразование `DT` в *длинную* форму, где каждое значение `dob` представляет собой отдельное наблюдение. + +Мы могли бы добиться этого с помощью `melt()`, указав аргументы `id.vars` и +`measure.vars` следующим образом: + +```{r} +DT.m1 = melt(DT, id.vars = c("family_id", "age_mother"), + measure.vars = c("dob_child1", "dob_child2", "dob_child3")) +DT.m1 +str(DT.m1) +``` + +* `measure.vars` указывает набор столбцов, которые мы хотели бы свернуть + (или объединить) вместе. + +* Мы также можем указать *номера* столбцов вместо их *имен*. + +* По умолчанию столбец `variable` является фактором. Установите для + аргумента `variable.factor` значение `FALSE`, если вместо этого вы хотите + вернуть вектор типа *`character`*. + +* По умолчанию «расплавленные» столбцы автоматически получают имена + `variable` и `value`. + +* `melt` сохраняет атрибуты столбцов в результатах. + +#### — Назовём столбцы `variable` и `value` соответственно `child` и `dob` + + +```{r} +DT.m1 = melt(DT, measure.vars = c("dob_child1", "dob_child2", "dob_child3"), + variable.name = "child", value.name = "dob") +DT.m1 +``` + +* По умолчанию, если один из аргументов `id.vars` или `measure.vars` + отсутствует, остальные столбцы *автоматически достаются* отсутствующему + аргументу. + +* Если не указаны ни `id.vars`, ни `measure.vars`, как указано в `?melt`, + все *не*-числовые, целые, логические столбцы достанутся `id.vars`. + + Кроме того, выдается предупреждающее сообщение, в котором выделяются столбцы, которые автоматически считаются `id.vars`. + +### b) `dcast` («отливка») `data.table` (из длинной в широкую) + +В предыдущем разделе мы рассмотрели, как перейти от широкой формы к +длинной. В этом разделе мы рассмотрим обратную операцию. + +#### - Как нам вернуться к исходной таблице данных `DT` из `DT.m1`? + +Мы бы хотели собрать все наблюдения *child*, соответствующие каждой паре +`family_id, age_mother`, вместе в одной строке. Мы можем сделать это с +помощью `dcast` следующим образом: + +```{r} +dcast(DT.m1, family_id + age_mother ~ child, value.var = "dob") +``` + +* `dcast` использует *формульный* интерфейс. Переменные в *левой части* + формулы соответствуют *id* (строкам), а в *правой части* — *measure* + (столбцам). + +* `value.var` обозначает столбец, который будет заполнен при приведении к + широкому формату. + +* `dcast` также старается сохранять атрибуты в результатах, где это + возможно. + +#### - Начиная с `DT.m1`, как нам узнать количество детей в каждой семье? + +Вы также можете передать функцию для агрегирования в `dcast` с аргументом +`fun.aggregate`. Это особенно важно, когда переданная формула даёт больше +одного наблюдения для каждой описываемой ею ячейки. + +```{r} +dcast(DT.m1, family_id ~ ., fun.agg = function(x) sum(!is.na(x)), value.var = "dob") +``` + +Ознакомьтесь с `?dcast`, чтобы узнать о других полезных аргументах и +примерах. + +## 2. Ограничения прежнего подхода `melt`/`dcast` + +До сих пор мы видели функции `melt` и `dcast`, которые эффективно +реализованы для `data.table`, используя внутренние механизмы `data.table` +(*быстрая поразрядная сортировка*, *двоичный поиск* и т.д.). + +Однако бывают ситуации, когда требуемая операция не может быть выражена +простым способом. Например, рассмотрим `data.table`, показанную ниже: + +```{r} +s2 <- "family_id age_mother dob_child1 dob_child2 dob_child3 gender_child1 gender_child2 gender_child3 +1 30 1998-11-26 2000-01-29 NA 1 2 NA +2 27 1996-06-22 NA NA 2 NA NA +3 26 2002-07-11 2004-04-05 2007-09-02 2 2 1 +4 32 2004-10-10 2009-08-27 2012-07-21 1 1 1 +5 29 2000-12-05 2005-02-28 NA 2 1 NA" +DT <- fread(s2) +DT +## 1 = female, 2 = male +``` + +Предположим, Вы хотите объединить (`melt`) все столбцы `dob` вместе, а также +столбцы `gender` вместе. Используя описанные выше функции, можно сделать +примерно следующее: + +```{r} +DT.m1 = melt(DT, id = c("family_id", "age_mother")) +DT.m1[, c("variable", "child") := tstrsplit(variable, "_", fixed = TRUE)] +DT.c1 = dcast(DT.m1, family_id + age_mother + child ~ variable, value.var = "value") +DT.c1 + +str(DT.c1) ## столбец gender теперь класса IDate! +``` + +#### Проблемы + +1. Мы хотели объединить все столбцы типа `dob` и `gender` + соответственно. Вместо этого мы объединяем их *все*, а затем снова + разделяем. Думаю, легко заметить, что это довольно запутанный путь (и + неэффективный). + + В качестве аналогии представьте, что у вас есть шкаф с четырьмя полками для одежды, и вы хотите сложить одежду с полок 1 и 2 вместе (в 1), а также 3 и 4 вместе (в 3). Мы делаем примерно следующее: объединяем всю одежду в одну кучу, а затем рассовываем ее обратно по полкам 1 и 3! + +2. Столбцы, передаваемые в `melt`, могут быть разных типов. Если «сплавлять» + их вместе, результат будет приведён к единому типу. + +3. Нам приходится создавать дополнительный столбец, разбивая столбец + `variable` на два других, назначение которых совершенно неочевидно. Мы + делаем это потому, что он нужен нам для вызова `dcast` на следующем шаге. + +4. Наконец, мы «отливаем» набор данных. Проблема в том, что эта операция + требует гораздо больше вычислений, чем *melt*. В частности, она требует + вычисления порядка переменных в формуле, а это дорого. + +Между прочим, `stats::reshape` способна выполнить эту операцию очень простым +способом. Это чрезвычайно полезная и часто недооцененная функция. Вам +определенно стоит её попробовать! + +## 3. Расширенная (новая) функциональность + +### a) Улучшенный `melt` + +Поскольку мы хотели бы, чтобы `data.table` выполняла эту операцию просто и +эффективно, используя тот же интерфейс, мы пошли дальше и реализовали +*дополнительную функциональность*, которая позволяет «выплавлять» несколько +столбцов *одновременно*. + +#### - `melt` для нескольких столбцов одновременно + +Идея довольно проста. Мы передаем список столбцов в `measure.vars`, где +каждый элемент списка содержит столбцы, которые должны быть объединены +вместе. + +```{r} +colA = paste0("dob_child", 1:3) +colB = paste0("gender_child", 1:3) +DT.m2 = melt(DT, measure = list(colA, colB), value.name = c("dob", "gender")) +DT.m2 + +str(DT.m2) ## тип столбца сохранён +``` + +* При необходимости мы можем удалить столбец `variable`. + +* Эта функция реализована полностью на языке C, поэтому является *быстрой* и + *экономичной по памяти*, а также *простой*. + +#### - Использование `patterns()` + +Обычно в таких задачах столбцы, которые мы хотели бы объединить, можно +выделить по шаблону. Для этого мы можем использовать функцию +`patterns()`. Приведенную выше операцию можно переписать так: + +```{r} +DT.m2 = melt(DT, measure = patterns("^dob", "^gender"), value.name = c("dob", "gender")) +DT.m2 +``` + +#### - Использование `measure()` для задания `measure.vars` через шаблон или разделитель + +Если, как в приведенных выше данных, входные столбцы для расплавления имеют +обычные имена, то можно использовать `measure`, что позволяет указать +столбцы для «переплавки» через разделитель или регулярное +выражение. Например, рассмотрим данные по ирисам, + +```{r} +(two.iris = data.table(datasets::iris)[c(1,150)]) +``` + +Про ирисы известно четыре числовых столбца, имена которых имеют регулярную +структуру: сначала цветочная часть, затем точка, затем длина или +ширина. Чтобы указать, что мы хотим «расплавить» эти четыре столбца, мы +можем использовать `measure` с `sep="."`, что означает использование +`strsplit` для всех имен столбцов; те столбцы, в которых после разбиения +получается максимальное количество групп, будут использованы в качестве +`measure.vars`: + +```{r} +melt(two.iris, measure.vars = measure(part, dim, sep=".")) +``` + +Первые два аргумента `measure` в приведенном выше коде (`part` и `dim`) +используются для названия выходных столбцов; количество аргументов должно +быть равно максимальному количеству групп после разбиения с помощью `sep`. + +Если мы хотим получить два столбца значений, по одному для каждой части, мы +можем использовать специальное ключевое слово `value.name`, которое означает +вывод столбца значений для каждого уникального имени, найденного в данной +группе: + +```{r} +melt(two.iris, measure.vars = measure(value.name, dim, sep=".")) +``` + +Используя приведенный выше код, мы получаем один столбец значений для каждой +части цветка. Если мы вместо этого хотим получить столбец значений для +каждого измерения, мы можем сделать следующее: + +```{r} +melt(two.iris, measure.vars = measure(part, value.name, sep=".")) +``` + +Возвращаясь к примеру с данными о семьях и детях, можно предложить более +сложное использование `measure`, включающее функцию, которая используется +для преобразования строковых значений `child` в целые числа: + +```{r} +DT.m3 = melt(DT, measure = measure(value.name, child=as.integer, sep="_child")) +DT.m3 +``` + +В приведенном выше коде мы использовали `sep="_child"`, что привело к +«расплавлению» только столбцов, содержащих эту строку (шесть имен столбцов, +разбитых на две группы). Аргумент `child=as.integer` означает, что вторая +группа приведет к созданию выходного столбца с именем `child` и значениями, +определенными путем подстановки строк из этой группы в функцию `as.integer`. + +Наконец, мы рассмотрим пример (заимствованный из пакета `tidyr`), в котором +нам необходимо определить группы с помощью регулярного выражения, а не +разделителя. + +```{r} +(who <- data.table(id=1, new_sp_m5564=2, newrel_f65=3)) +melt(who, measure.vars = measure( + diagnosis, gender, ages, pattern="new_?(.*)_(.)(.*)")) +``` + +Аргумент `pattern` должен быть Perl-совместимым регулярным выражением, +захватывающим столько же групп (подвыражений, заключенных в скобки), сколько +и других аргументов (имен групп). В приведенном ниже коде показано, как +использовать более сложное регулярное выражение с пятью группами, два +числовых столбца вывода и анонимную функцию преобразования типов, + +```{r} +melt(who, measure.vars = measure( + diagnosis, gender, ages, + ymin=as.numeric, + ymax=function(y) ifelse(nzchar(y), as.numeric(y), Inf), + pattern="new_?(.*)_(.)(([0-9]{2})([0-9]{0,2}))" +)) +``` + +### b) Улучшенный `dcast` + +Отлично! Теперь мы можем «расплавлять» данные в нескольких столбцах +одновременно. Теперь, если взять набор данных `DT.m2`, полученный выше, как +мы можем вернуться к тому же формату, что и исходные данные, с которых мы +начали? + +Если мы используем обычный `dcast`, то нам придется дважды выполнять «отлив» +и связывать результаты вместе. Но это опять же многословно, не совсем просто +и к тому же неэффективно. + +#### - «Отлив» нескольких `value.var` одновременно + +Теперь можно передавать **несколько столбцов `value.var`** для `dcast`, +чтобы операции выполнялись внутри `data.table` и эффективным образом. + +```{r} +## новая функция 'dcast' - несколько value.vars +DT.c2 = dcast(DT.m2, family_id + age_mother ~ variable, value.var = c("dob", "gender")) +DT.c2 +``` + +* Атрибуты по возможности сохраняются в результате. + +* Всё выполнено внутренними средствами, быстро и экономично по памяти. + +# + +#### Несколько функций в `fun.aggregate`: + +Вы также можете передать *несколько функций* в `fun.aggregate` для +`dcast`. Ознакомьтесь с примерами в `?dcast`, которые иллюстрируют эту +функциональность. + +```{r, echo=FALSE} +setDTthreads(.old.th) +``` + +# + +***