diff --git a/R/between.R b/R/between.R index a49cea461b..4e358c3310 100644 --- a/R/between.R +++ b/R/between.R @@ -1,6 +1,6 @@ # is x[i] in between lower[i] and upper[i] ? between = function(x, lower, upper, incbounds=TRUE, NAbounds=TRUE, check=FALSE) { - if (is.logical(x)) stop("between has been x of type logical") + if (is.logical(x)) stop("between has been passed an argument x of type logical") if (is.logical(lower)) lower = as.integer(lower) # typically NA (which is logical type) if (is.logical(upper)) upper = as.integer(upper) # typically NA (which is logical type) is.px = function(x) inherits(x, "POSIXct") diff --git a/R/data.table.R b/R/data.table.R index e774a7f4a7..6a4d2d0b3a 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -183,7 +183,7 @@ replace_dot_alias = function(e) { } return(x) } - if (!mult %chin% c("first","last","all")) stop("mult argument can only be 'first','last' or 'all'") + if (!mult %chin% c("first","last","all")) stop("mult argument can only be 'first', 'last' or 'all'") missingroll = missing(roll) if (length(roll)!=1L || is.na(roll)) stop("roll must be a single TRUE, FALSE, positive/negative integer/double including +Inf and -Inf or 'nearest'") if (is.character(roll)) { diff --git a/R/groupingsets.R b/R/groupingsets.R index dadcbb0fe8..5d4c0fffac 100644 --- a/R/groupingsets.R +++ b/R/groupingsets.R @@ -60,10 +60,10 @@ groupingsets.data.table = function(x, j, by, sets, .SDcols, id = FALSE, jj, ...) stop("All columns used in 'sets' argument must be in 'by' too. Columns used in 'sets' but not present in 'by': ", brackify(setdiff(sets.all.by, by))) if (id && "grouping" %chin% names(x)) stop("When using `id=TRUE` the 'x' data.table must not have a column named 'grouping'.") - if (!all(sapply(sets, function(x) length(x)==uniqueN(x)))) + if (any(sapply(sets, anyDuplicated))) stop("Character vectors in 'sets' list must not have duplicated column names within a single grouping set.") - if (!identical(lapply(sets, sort), unique(lapply(sets, sort)))) - warning("Double counting is going to happen. Argument 'sets' should be unique without taking order into account, unless you really want double counting, then get used to that warning. Otherwise `sets=unique(lapply(sets, sort))` will do the trick.") + if (length(sets) > 1L && (idx<-anyDuplicated(lapply(sets, sort)))) + warning("'sets' contains a duplicate (i.e., equivalent up to sorting) element at index ", idx, "; 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.") # input arguments handling jj = if (!missing(jj)) jj else substitute(j) av = all.vars(jj, TRUE) diff --git a/R/onAttach.R b/R/onAttach.R index 95eb93249a..397b0b93dc 100644 --- a/R/onAttach.R +++ b/R/onAttach.R @@ -20,6 +20,8 @@ if (!isTRUE(getOption("datatable.quiet"))) { # new option in v1.12.4, #3489 packageStartupMessage("data.table ", v, if(dev)paste0(" IN DEVELOPMENT built ",d,g), " using ", getDTthreads(verbose=FALSE), " threads (see ?getDTthreads). Latest news: r-datatable.com") + if (gettext("TRANSLATION CHECK", domain='R-data.table') != "TRANSLATION CHECK") + packageStartupMessage(gettext("**********\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")) if (dev && (Sys.Date() - as.Date(d))>28L) packageStartupMessage("**********\nThis development version of data.table was built more than 4 weeks ago. Please update: data.table::update.dev.pkg()\n**********") if (!.Call(ChasOpenMP)) diff --git a/configure b/configure index 96fc844a18..ad3b6c86e0 100755 --- a/configure +++ b/configure @@ -51,4 +51,3 @@ fi version=`pkg-config --modversion zlib` echo "zlib ${version} is available ok" exit 0 - diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo new file mode 100644 index 0000000000..1a688c2ba6 Binary files /dev/null and b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo differ diff --git a/inst/po/en@quot/LC_MESSAGES/data.table.mo b/inst/po/en@quot/LC_MESSAGES/data.table.mo new file mode 100644 index 0000000000..de6c0b5a40 Binary files /dev/null and b/inst/po/en@quot/LC_MESSAGES/data.table.mo differ diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo new file mode 100644 index 0000000000..7ef24e1c57 Binary files /dev/null and b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo differ diff --git a/inst/po/zh_CN/LC_MESSAGES/data.table.mo b/inst/po/zh_CN/LC_MESSAGES/data.table.mo new file mode 100644 index 0000000000..494e694301 Binary files /dev/null and b/inst/po/zh_CN/LC_MESSAGES/data.table.mo differ diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index 81d9fcaebd..4ae2710bdb 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -10059,7 +10059,7 @@ test(1695.14, x %between% c(3, NA), rep(NA, 3L)) test(1695.15, x %between% c(NA, NA), rep(NA, 3L)) x = integer(0) test(1695.16, x %between% c(3, 7), logical(0)) -test(1695.17, TRUE %between% c(3, 7), error="between has been x of type logical") +test(1695.17, TRUE %between% c(3, 7), error="between has been passed an argument x of type logical") x = c("foo","bar","paz") test(1695.18, between(x, "bag", "fog"), c(FALSE, TRUE, FALSE)) test(1695.19, between(x, c("b","f","a"), "q"), c(TRUE, FALSE, TRUE)) @@ -10902,14 +10902,14 @@ test(1750.18, uniqueN({ r <- groupingsets(dt, j = c(list(cnt=.N), lapply(.SD, sum)), by = c("color","year","status"), sets=sets, id=TRUE) r[, lapply(.SD, sum), by = .(double_counting = grouping==5L, double_counting = grouping!=5L), .SDcols = c("cnt","amount","value")] }, by = c("cnt","amount","value") -), 1L, warning = "Double counting is going to happen") +), 1L, warning = "'sets' contains a duplicate") # duplicate entries in `sets` but reorderd - double counting on `grouping==1L` sets = list(c("color","year"), "year", c("year","color"), character()) test(1750.19, uniqueN({ r <- groupingsets(dt, j = c(list(cnt=.N), lapply(.SD, sum)), by = c("color","year","status"), sets=sets, id=TRUE) r[, lapply(.SD, sum), by = .(double_counting = grouping==1L, double_counting = grouping!=1L), .SDcols = c("cnt","amount","value")] }, by = c("cnt","amount","value") -), 1L, warning = "Double counting is going to happen") +), 1L, warning = "'sets' contains a duplicate") # entries in `by` / `sets` not exists in data.table test(1750.20, exists("notexist"), FALSE) # https://github.com/Rdatatable/data.table/issues/3055#issuecomment-423364960 test(1750.21, groupingsets(dt, j = c(list(cnt=.N), lapply(.SD, sum)), by = c("color","year","notexist"), sets=list(c("color"), character()), id=TRUE), error = "object 'notexist' not found") @@ -13278,8 +13278,8 @@ test(1962.039, is.sorted(3:1, by = 'x'), DT = data.table(a = 3:1) test(1962.0401, forderv(DT, sort=FALSE, retGrp=FALSE), error='At least one of retGrp= or sort= must be TRUE') -test(1962.0402, forderv(DT, sort=0), error='sort= must be TRUE or FALSE') -test(1962.0403, forderv(DT, retGrp=0), error='retGrp= must be TRUE or FALSE') +test(1962.0402, forderv(DT, sort=0), error='sort must be TRUE or FALSE') +test(1962.0403, forderv(DT, retGrp=0), error='retGrp must be TRUE or FALSE') test(1962.041, forderv(DT, na.last = logical(0L)), error='na.last must be logical TRUE, FALSE or NA of length 1') test(1962.042, forderv(DT, na.last = c(TRUE, FALSE)), error='na.last must be logical TRUE, FALSE or NA of length 1') test(1962.043, forderv(DT$a, by = 'a'), error='x is a single vector, non-NULL') diff --git a/po/R-data.table.pot b/po/R-data.table.pot new file mode 100644 index 0000000000..ee2d6efa79 --- /dev/null +++ b/po/R-data.table.pot @@ -0,0 +1,1754 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.7\n" +"POT-Creation-Date: 2019-10-21 16:15\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + + +msgid "data.table package loaded. When developing don't load package" +msgstr "" + +msgid "Internal error -- difftime objects may not be added to IDate, but Ops dispatch should have intervened to prevent this" +msgstr "" + +msgid "binary + is not defined for \"IDate\" objects" +msgstr "" + +msgid "can only subtract from \"IDate\" objects" +msgstr "" + +msgid "Internal error: storage mode of IDate is somehow no longer integer" +msgstr "" + +msgid "unary - is not defined for \"IDate\" objects" +msgstr "" + +msgid "Internal error -- difftime objects may not be subtracted from IDate, but Ops dispatch should have intervened to prevent this" +msgstr "" + +msgid "Valid options for ms are 'truncate'," +msgstr "" + +msgid "'nearest', and 'ceil'." +msgstr "" + +msgid "as.data.table.array method should only be called for arrays with 3+ dimensions; use the matrix method for 2-dimensional arrays" +msgstr "" + +msgid "Argument 'value.name' must be scalar character, non-NA and at least one character" +msgstr "" + +msgid "Argument 'sorted' must be scalar logical and non-NA" +msgstr "" + +msgid "Argument 'na.rm' must be scalar logical and non-NA" +msgstr "" + +msgid "Please provide either 'key' or 'sorted', but not both." +msgstr "" + +msgid "Argument 'value.name' should not overlap with column names in result:" +msgstr "" + +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 "" + +msgid "Item" +msgstr "" + +msgid "has" +msgstr "" + +msgid "rows but longest item has" +msgstr "" + +msgid "; recycled with remainder." +msgstr "" + +msgid "has 0 rows but longest item has" +msgstr "" + +msgid "; filled with NA" +msgstr "" + +msgid "A column may not be called .SD. That has special meaning." +msgstr "" + +msgid "class must be length 1" +msgstr "" + +msgid "between has been passed an argument x of type logical" +msgstr "" + +msgid "'between' function the 'x' argument is a POSIX class while 'lower' was not, coercion to POSIX failed with:" +msgstr "" + +msgid "'between' function the 'x' argument is a POSIX class while 'upper' was not, coercion to POSIX failed with:" +msgstr "" + +msgid "'between' lower= and upper= are both POSIXct but have different tzone attributes:" +msgstr "" + +msgid ". Please align their time zones." +msgstr "" + +msgid "'between' arguments are all POSIXct but have mismatched tzone attributes:" +msgstr "" + +msgid ". The UTC times will be compared." +msgstr "" + +msgid "trying to use integer64 class when 'bit64' package is not installed" +msgstr "" + +msgid "Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" +msgstr "" + +msgid "Some lower>upper for this non-numeric and non-character type" +msgstr "" + +msgid "RHS has length()" +msgstr "" + +msgid "; expecting length 2." +msgstr "" + +msgid "c" +msgstr "" + +msgid "Perhaps you meant %s?" +msgstr "" + +msgid "The first element should be the lower bound(s);" +msgstr "" + +msgid "the second element should be the upper bound(s)." +msgstr "" + +msgid "x." +msgstr "" + +msgid "is type" +msgstr "" + +msgid "which is not supported by data.table join" +msgstr "" + +msgid "i." +msgstr "" + +msgid "Attempting roll join on factor column when joining x." +msgstr "" + +msgid "to i." +msgstr "" + +msgid ". Only integer, double or character columns may be roll joined." +msgstr "" + +msgid "Incompatible join types: x." +msgstr "" + +msgid "(" +msgstr "" + +msgid ") and i." +msgstr "" + +msgid "). Factor columns must join to factor or character columns." +msgstr "" + +msgid ")" +msgstr "" + +msgid "Incompatible join types:" +msgstr "" + +msgid "is type integer64 but" +msgstr "" + +msgid "is type double and contains fractions" +msgstr "" + +msgid "roll is not implemented for non-equi joins yet." +msgstr "" + +msgid "Column name '_nqgrp_' is reserved for non-equi joins." +msgstr "" + +msgid "key argument of data.table() must be character" +msgstr "" + +msgid "Object '" +msgstr "" + +msgid "' not found. Perhaps you intended" +msgstr "" + +msgid "," +msgstr "" + +msgid "or" +msgstr "" + +msgid "more" +msgstr "" + +msgid "' not found amongst" +msgstr "" + +msgid "and" +msgstr "" + +msgid "Provide either by= or keyby= but not both" +msgstr "" + +msgid "Ignoring keyby= because j= is not supplied" +msgstr "" + +msgid "Ignoring by= because j= is not supplied" +msgstr "" + +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 '" +msgstr "" + +msgid "'." +msgstr "" + +msgid "i and j are both missing so ignoring the other arguments. This warning will be upgraded to error in future." +msgstr "" + +msgid "mult argument can only be 'first', 'last' or 'all'" +msgstr "" + +msgid "roll must be a single TRUE, FALSE, positive/negative integer/double including +Inf and -Inf or 'nearest'" +msgstr "" + +msgid "roll is '" +msgstr "" + +msgid "' (type character). Only valid character value is 'nearest'." +msgstr "" + +msgid "rollends must be a logical vector" +msgstr "" + +msgid "rollends must be length 1 or 2" +msgstr "" + +msgid "nomatch= must be either NA or NULL (or 0 for backwards compatibility which is the same as NULL)" +msgstr "" + +msgid "which= must be a logical vector length 1. Either FALSE, TRUE or NA." +msgstr "" + +msgid "which==" +msgstr "" + +msgid "(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 "" + +msgid "which=NA with nomatch=0 would always return an empty vector. Please change or remove either which or nomatch." +msgstr "" + +msgid "j must be provided when with=FALSE" +msgstr "" + +msgid "The symbol .. is invalid. The .. prefix must be followed by at least one character." +msgstr "" + +msgid "Variable '" +msgstr "" + +msgid "' is not found in calling scope. Looking in calling scope because you used the .. prefix." +msgstr "" + +msgid "Variable '.." +msgstr "" + +msgid "' does exist in calling scope though, so please just removed the .. prefix from that variable name in calling scope." +msgstr "" + +msgid "Both '" +msgstr "" + +msgid "' and '.." +msgstr "" + +msgid "' exist in calling scope. Please remove the '.." +msgstr "" + +msgid "' variable in calling scope for clarity." +msgstr "" + +msgid "Internal error: DT[, ..var] should be dealt with by the branch above now." +msgstr "" + +msgid "' 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 "" + +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 "" + +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 "" + +msgid "nomatch isn't relevant together with :=, ignoring nomatch" +msgstr "" + +msgid "not-join '!' prefix is present on i but nomatch is provided. Please remove nomatch." +msgstr "" + +msgid "is not found in calling scope" +msgstr "" + +msgid "When the first argument inside DT[...] is a single symbol (e.g. DT[var]), data.table looks for var in calling scope." +msgstr "" + +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 "" + +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 "" + +msgid "Attempting to do natural join but no common columns in provided tables" +msgstr "" + +msgid "Internal error. Cannot by=.EACHI when joining to a secondary key, yet" +msgstr "" + +msgid "Internal error. irows has length in by=.EACHI" +msgstr "" + +msgid "logical error. i is not a data.table, but 'on' argument is provided." +msgstr "" + +msgid "i has evaluated to type" +msgstr "" + +msgid ". Expecting logical, integer or double." +msgstr "" + +msgid "i evaluates to a logical vector length" +msgstr "" + +msgid "but there are" +msgstr "" + +msgid "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 "" + +msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" +msgstr "" + +msgid "with=FALSE together with := was deprecated in v1.9.4 released Oct 2014. 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. As warned in 2014, this is now a warning." +msgstr "" + +msgid "with=FALSE ignored, it isn't needed when using :=. See ?':=' for examples." +msgstr "" + +msgid "column(s) not removed because not found:" +msgstr "" + +msgid "column(s) not found:" +msgstr "" + +msgid "of j is" +msgstr "" + +msgid "which is outside the column number range [1,ncol=" +msgstr "" + +msgid "]" +msgstr "" + +msgid "j mixes positives and negatives" +msgstr "" + +msgid "When with=FALSE, j-argument should be of type logical/character/integer indicating the columns to select." +msgstr "" + +msgid "by=c(...), key(...) or names(...) must evaluate to 'character'" +msgstr "" + +msgid "'by' is a character vector length" +msgstr "" + +msgid "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 "" + +msgid "Internal error: irows isn't integer" +msgstr "" + +msgid "'by' appears to evaluate to column names but isn't c() or key(). Use by=list(...) if you can. Otherwise, by=eval" +msgstr "" + +msgid "should work. This is for efficiency so data.table can detect which columns are needed." +msgstr "" + +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 "" + +msgid "column or expression" +msgstr "" + +msgid "of 'by' or 'keyby' is type" +msgstr "" + +msgid ". Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]" +msgstr "" + +msgid "The items in the 'by' or 'keyby' list are length (" +msgstr "" + +msgid "). Each must be length" +msgstr "" + +msgid "; the same length as there are rows in x (after subsetting if i is provided)." +msgstr "" + +msgid "of the .() or list() passed to j is missing" +msgstr "" + +msgid ".SDcols missing at the following indices:" +msgstr "" + +msgid ".SDcols is numeric but has both +ve and -ve indices" +msgstr "" + +msgid ".SDcols is numeric but out of bounds [1," +msgstr "" + +msgid "] at:" +msgstr "" + +msgid ".SDcols should be column numbers or names" +msgstr "" + +msgid "Some items of .SDcols are not column names:" +msgstr "" + +msgid "This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?data.table." +msgstr "" + +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 "" + +msgid "In `:=`(col1=val1, col2=val2, ...) form, all arguments must be named." +msgstr "" + +msgid "LHS of := must be a symbol, or an atomic vector (column names or positions)." +msgstr "" + +msgid "LHS of := appears to be column positions but are outside [1,ncol] range. New columns can only be added by name." +msgstr "" + +msgid "LHS of := isn't column names ('character') or positions ('integer' or 'numeric')" +msgstr "" + +msgid "Invalid .internal.selfref detected and fixed by taking a (shallow) copy of the data.table so that := can add this new column by reference. At an earlier point, this data.table has been 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. 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 "" + +msgid "Cannot assign to an under-allocated recursively indexed list -- L[[i]][,:=] syntax is only valid when i is length 1, but it's length" +msgstr "" + +msgid "Internal error -- item '" +msgstr "" + +msgid "' not found in names of list" +msgstr "" + +msgid "Internal error -- column(s) not found:" +msgstr "" + +msgid "strptime() usage detected and wrapped with as.POSIXct(). This is to minimize the chance of assigning POSIXlt columns, which use 40+ bytes to store one date (versus 8 for POSIXct). Use as.POSIXct() (which will call strptime() as needed internally) to avoid this warning." +msgstr "" + +msgid "' is not found in calling scope. Looking in calling scope because this symbol was prefixed with .. in the j= parameter." +msgstr "" + +msgid "Internal error: xcolAns does not pass checks:" +msgstr "" + +msgid "Internal error: irows is NULL when making join result at R level. Should no longer happen now we use CsubsetDT earlier." +msgstr "" + +msgid "j (the 2nd argument inside [...]) is a single symbol but column name '" +msgstr "" + +msgid "' is not found. Perhaps you intended DT[, .." +msgstr "" + +msgid "]. This difference to data.frame is deliberate and explained in FAQ 1.1." +msgstr "" + +msgid "Internal error: j has created a data.table result containing a NULL column" +msgstr "" + +msgid "The column '.N' can't be grouped because it conflicts with the special .N variable. Try setnames(DT,'.N','N') first." +msgstr "" + +msgid "The column '.I' can't be grouped because it conflicts with the special .I variable. Try setnames(DT,'.I','I') first." +msgstr "" + +msgid "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" +msgstr "" + +msgid "Internal error: by= is missing" +msgstr "" + +msgid "Internal error: byindex not the index name" +msgstr "" + +msgid "Internal error: byindex not found" +msgstr "" + +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 "" + +msgid "Internal error: length(irows)!=length(o__)" +msgstr "" + +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 "" + +msgid "Internal error: jvnames is length" +msgstr "" + +msgid "but ans is" +msgstr "" + +msgid "and bynames is" +msgstr "" + +msgid "rownames and rownames.value cannot both be used at the same time" +msgstr "" + +msgid "length(rownames)==" +msgstr "" + +msgid "but nrow(DT)==" +msgstr "" + +msgid ". The rownames argument specifies a single column name or number. Consider rownames.value= instead." +msgstr "" + +msgid "length(rownames)==0 but should be a single column name or number, or NULL" +msgstr "" + +msgid "rownames is TRUE but key has multiple columns" +msgstr "" + +msgid "; taking first column x[,1] as rownames" +msgstr "" + +msgid "'" +msgstr "" + +msgid "' is not a column of x" +msgstr "" + +msgid "as.integer(rownames)==" +msgstr "" + +msgid "]." +msgstr "" + +msgid "length(rownames.value)==" +msgstr "" + +msgid "but should be nrow(x)==" +msgstr "" + +msgid "When i is a matrix in DT[i]<-value syntax, it doesn't make sense to provide j" +msgstr "" + +msgid "j must be an atomic vector, see ?is.atomic" +msgstr "" + +msgid "NA in j" +msgstr "" + +msgid "j must be vector of column name or positions" +msgstr "" + +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 "" + +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 "" + +msgid "attempting to assign invalid object to dimnames of a data.table" +msgstr "" + +msgid "data.tables do not have rownames" +msgstr "" + +msgid "Can't assign" +msgstr "" + +msgid "colnames to a" +msgstr "" + +msgid "-column data.table" +msgstr "" + +msgid "'subset' must evaluate to logical" +msgstr "" + +msgid "Argument 'invert' must be logical TRUE/FALSE" +msgstr "" + +msgid "x argument must be a data.table" +msgstr "" + +msgid "group length is 0 but data nrow > 0" +msgstr "" + +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 "" + +msgid "Either 'by' or 'f' argument must be supplied" +msgstr "" + +msgid "Column '.ll.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Column '.nm.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Argument 'by' must refer to column names in x" +msgstr "" + +msgid "Argument 'by' must refer only to atomic-type columns, but the following columns are non-atomic:" +msgstr "" + +msgid "x is not a data.table. Shallow copy is a copy of the vector of column pointers (only), so is only meaningful for data.table" +msgstr "" + +msgid "setalloccol attempting to modify `*tmp*`" +msgstr "" + +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 "" + +msgid "x is not a data.table or data.frame" +msgstr "" + +msgid "x has" +msgstr "" + +msgid "columns but its names are length" +msgstr "" + +msgid "Passed a vector of type '" +msgstr "" + +msgid "'. Needs to be type 'character'." +msgstr "" + +msgid "names to a" +msgstr "" + +msgid "column data.table" +msgstr "" + +msgid "When 'new' is provided, 'old' must be provided too" +msgstr "" + +msgid "'new' is not a character vector or a function" +msgstr "" + +msgid "NA in 'new' at positions" +msgstr "" + +msgid "Some duplicates exist in 'old':" +msgstr "" + +msgid "'old' is type" +msgstr "" + +msgid "but should be integer, double or character" +msgstr "" + +msgid "'old' is length" +msgstr "" + +msgid "but 'new' is length" +msgstr "" + +msgid "NA (or out of bounds) in 'old' at positions" +msgstr "" + +msgid "of 'old' is '" +msgstr "" + +msgid "' which appears several times in column names. Just the first will be changed. There are" +msgstr "" + +msgid "other items in old that are also duplicated in column names." +msgstr "" + +msgid "Items of 'old' not found in column names:" +msgstr "" + +msgid ". Consider skip_absent=TRUE." +msgstr "" + +msgid "Internal error: length(i)!=length(new)" +msgstr "" + +msgid "x has some duplicated column name(s):" +msgstr "" + +msgid ". Please remove or rename the duplicate(s) and try again." +msgstr "" + +msgid "Input is" +msgstr "" + +msgid "but should be a plain list of items to be stacked" +msgstr "" + +msgid "idcol must be a logical or character vector of length 1. If logical TRUE the id column will named '.id'." +msgstr "" + +msgid "use.names=NA invalid" +msgstr "" + +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 "" + +msgid "Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(\":=\")." +msgstr "" + +msgid "setDF only accepts data.table, data.frame or list of equal length as input" +msgstr "" + +msgid "rownames contains duplicates" +msgstr "" + +msgid "rownames incorrect length; expected" +msgstr "" + +msgid "names, got" +msgstr "" + +msgid "All elements in argument 'x' to 'setDF' must be of same length" +msgstr "" + +msgid "Cannot find symbol" +msgstr "" + +msgid "Cannot convert '" +msgstr "" + +msgid "' to data.table by reference because binding is locked. It is very likely that '" +msgstr "" + +msgid "' 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 "" + +msgid "Some columns are a multi-column type (such as a matrix column):" +msgstr "" + +msgid ". 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 "" + +msgid "Column" +msgstr "" + +msgid "is of POSIXlt type. Please convert it to POSIXct using as.POSIXct and run setDT again. We do not recommend use of POSIXlt at all because it uses 40 bytes to store one date." +msgstr "" + +msgid "All elements in argument 'x' to 'setDT' must be of same length, but the profile of input lengths (length:frequency) is:" +msgstr "" + +msgid "%s:%d" +msgstr "" + +msgid "The first entry with fewer than" +msgstr "" + +msgid "entries is" +msgstr "" + +msgid "Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table'" +msgstr "" + +msgid "Item '" +msgstr "" + +msgid "' not found in names of input list" +msgstr "" + +msgid "'prefix' must be NULL or a character vector of length 1." +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense." +msgstr "" + +msgid "x is a list, 'cols' cannot be 0-length." +msgstr "" + +msgid "RHS of" +msgstr "" + +msgid "is length" +msgstr "" + +msgid "which is not 1 or nrow (" +msgstr "" + +msgid "). For robustness, no recycling is allowed (other than of length 1 RHS). Consider %in% instead." +msgstr "" + +msgid "Internal error in .isFastSubsettable. Please report to data.table developers" +msgstr "" + +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 "" + +msgid "Found more than one operator in one 'on' statement:" +msgstr "" + +msgid ". Please specify a single operator." +msgstr "" + +msgid "'on' contains no column name:" +msgstr "" + +msgid ". Each 'on' clause must contain one or two column names." +msgstr "" + +msgid "'on' contains more than 2 column names:" +msgstr "" + +msgid "Invalid operators" +msgstr "" + +msgid ". Only allowed operators are" +msgstr "" + +msgid "." +msgstr "" + +msgid "'fromLast' must be TRUE or FALSE" +msgstr "" + +msgid "x must be an atomic vector or data.frames/data.tables" +msgstr "" + +msgid "Using '" +msgstr "" + +msgid "' as value column. Use 'value.var' to override" +msgstr "" + +msgid "The dcast generic in data.table has been passed a" +msgstr "" + +msgid ", but data.table::dcast currently only has a method for data.tables. Please confirm your input is a data.table, with setDT(" +msgstr "" + +msgid ") or as.data.table(" +msgstr "" + +msgid "). If you intend to use a reshape2::dcast, try installing that package first, but do note that reshape2 is deprecated and you should be migrating your code away from using it." +msgstr "" + +msgid "and will attempt to redirect to the reshape2::dcast; please note that reshape2 is deprecated, and this redirection is now deprecated as well. Please do this redirection yourself like reshape2::dcast(" +msgstr "" + +msgid "). In the next version, this warning will become an error." +msgstr "" + +msgid "Invalid formula. Cast formula should be of the form LHS ~ RHS, for e.g., a + b ~ c." +msgstr "" + +msgid "data.table to cast must have unique column names" +msgstr "" + +msgid "value.var values [" +msgstr "" + +msgid "] are not found in 'data'." +msgstr "" + +msgid "When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be either of length =1 or =length(fun.aggregate)." +msgstr "" + +msgid "'data' must be a data.table." +msgstr "" + +msgid "'drop' must be logical TRUE/FALSE" +msgstr "" + +msgid "Column [" +msgstr "" + +msgid "] not found or of unknown type." +msgstr "" + +msgid "Columns specified in formula can not be of type list" +msgstr "" + +msgid "Can not cast an empty data.table" +msgstr "" + +msgid "Aggregate function missing, defaulting to 'length'" +msgstr "" + +msgid "Internal error -- empty rhsnames in dcast; please report" +msgstr "" + +msgid "The melt generic in data.table has been passed a" +msgstr "" + +msgid ", but data.table::melt currently only has a method for data.tables. Please confirm your input is a data.table, with setDT(" +msgstr "" + +msgid "). If you intend to use a method from reshape2, try installing that package first, but do note that reshape2 is deprecated and you should be migrating your code away from using it." +msgstr "" + +msgid "and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(" +msgstr "" + +msgid "Input patterns must be of type character." +msgstr "" + +msgid "'data' must be a data.table" +msgstr "" + +msgid "'value.name' provided in both 'measure.vars'" +msgstr "" + +msgid "and 'value.name argument'; value provided in" +msgstr "" + +msgid "'measure.vars' is given precedence." +msgstr "" + +msgid "Please provide a name to each element of 'measure.vars'." +msgstr "" + +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 "" + +msgid "maxgap must be a non-negative integer value of length 1" +msgstr "" + +msgid "minoverlap must be a positive integer value of length 1" +msgstr "" + +msgid "which must be a logical vector of length 1. Either TRUE/FALSE" +msgstr "" + +msgid "nomatch must either be NA or NULL" +msgstr "" + +msgid "maxgap and minoverlap arguments are not yet implemented." +msgstr "" + +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 "" + +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 "" + +msgid "Invalid numeric value for 'by.x'; it should be a vector with values 1 <= by.x <= length(x)" +msgstr "" + +msgid "Invalid numeric value for 'by.y'; it should be a vector with values 1 <= by.y <= length(y)" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.x" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.y" +msgstr "" + +msgid "The first" +msgstr "" + +msgid "columns of y's key must be identical to the columns specified in by.y." +msgstr "" + +msgid "Elements listed in 'by.x' must be valid names in data.table 'x'" +msgstr "" + +msgid "Duplicate columns are not allowed in overlap joins. This may change in the future." +msgstr "" + +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 "" + +msgid "y has some duplicated column name(s):" +msgstr "" + +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 "" + +msgid "NA values in data.table 'x' start column: '" +msgstr "" + +msgid "'. All rows with NA values in the range columns must be removed for foverlaps() to work." +msgstr "" + +msgid "NA values in data.table 'x' end column: '" +msgstr "" + +msgid "All entries in column" +msgstr "" + +msgid "should be <= corresponding entries in column" +msgstr "" + +msgid "in data.table 'x'." +msgstr "" + +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 "" + +msgid "NA values in data.table 'y' start column: '" +msgstr "" + +msgid "NA values in data.table 'y' end column: '" +msgstr "" + +msgid "in data.table 'y'." +msgstr "" + +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 "" + +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 "" + +msgid "Not yet implemented" +msgstr "" + +msgid "maxgap > minoverlap. maxgap will have no effect here." +msgstr "" + +msgid "length(na.last) = 0" +msgstr "" + +msgid "length(na.last) > 1, only the first element will be used" +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense" +msgstr "" + +msgid "x is a list, 'cols' can not be 0-length" +msgstr "" + +msgid "Used more than one of the arguments input=, file=, text= and cmd=." +msgstr "" + +msgid "Argument 'encoding' must be 'unknown', 'UTF-8' or 'Latin-1'." +msgstr "" + +msgid "'text=' is type" +msgstr "" + +msgid "but must be character." +msgstr "" + +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 "" + +msgid "input= contains no \\n or \\r, but starts with a space. Please remove the leading space, or use text=, file= or cmd=" +msgstr "" + +msgid "Input URL requires https:// connection for which fread() requires 'curl' package which cannot be found. Please install 'curl' using 'install.packages('curl')'." +msgstr "" + +msgid "Taking input= as a system command ('" +msgstr "" + +msgid "') and a variable has been used in the expression passed to `input=`. Please use fread(cmd=...). There is a security concern if you are creating an app, and 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 "" + +msgid "File '" +msgstr "" + +msgid "' does not exist or is non-readable. getwd()=='" +msgstr "" + +msgid "' is a directory. Not yet implemented." +msgstr "" + +msgid "' has size 0. Returning a NULL" +msgstr "" + +msgid "data.table" +msgstr "" + +msgid "data.frame" +msgstr "" + +msgid "To read gz and bz2 files directly, fread() requires 'R.utils' package which cannot be found. Please install 'R.utils' using 'install.packages('R.utils')'." +msgstr "" + +msgid "'autostart' is now deprecated and ignored. Consider skip='string' or skip=n" +msgstr "" + +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 "" + +msgid "colClasses is not type list or character vector" +msgstr "" + +msgid "colClasses=\"NULL\" (quoted) is interpreted as colClasses=NULL (the default) as opposed to dropping every column." +msgstr "" + +msgid "strip.white==TRUE (default) and \"\" is present in na.strings, so any number of spaces in string columns will already be read as ." +msgstr "" + +msgid "Since strip.white=TRUE (default), use na.strings=\"\" to specify that any number of spaces in a string column should be read as ." +msgstr "" + +msgid "But strip.white=FALSE. Use strip.white=TRUE (default) together with na.strings=\"\" to turn any number of spaces in string columns into " +msgstr "" + +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 "" + +msgid "Combining a search string as 'skip' and reading a YAML header may not work as expected -- currently," +msgstr "" + +msgid "reading will proceed to search for 'skip' from the beginning of the file, NOT from the end of" +msgstr "" + +msgid "the metadata; please file an issue on GitHub if you'd like to see more intuitive behavior supported." +msgstr "" + +msgid "Encountered <" +msgstr "" + +msgid "..." +msgstr "" + +msgid "> at the first" +msgstr "" + +msgid "unskipped line (" +msgstr "" + +msgid "), which does not constitute the start to a valid YAML header" +msgstr "" + +msgid "(expecting something matching regex \"" +msgstr "" + +msgid "\"); please check your input and try again." +msgstr "" + +msgid "Reached the end of the file before finding a completion to the YAML header. A valid YAML header is bookended by lines matching" +msgstr "" + +msgid "the regex \"" +msgstr "" + +msgid "\". Please double check the input file is a valid csvy." +msgstr "" + +msgid "User-supplied 'header' will override that found in metadata." +msgstr "" + +msgid "User-supplied column names in 'col.names' will override those found in YAML metadata." +msgstr "" + +msgid "colClasses dictated by user input and those read from YAML header are in conflict (specifically, for column" +msgstr "" + +msgid "s" +msgstr "" + +msgid "[" +msgstr "" + +msgid "]); the proceeding assumes the user input was" +msgstr "" + +msgid "an intentional override and will ignore the types implied by the YAML header; please exclude" +msgstr "" + +msgid "these columns" +msgstr "" + +msgid "this column from colClasses if this was unintentional." +msgstr "" + +msgid "User-supplied 'sep' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'quote' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'dec' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'na.strings' will override that found in metadata." +msgstr "" + +msgid "Column '" +msgstr "" + +msgid "' was requested to be '" +msgstr "" + +msgid "' but fread encountered the following" +msgstr "" + +msgid "error" +msgstr "" + +msgid "warning" +msgstr "" + +msgid ":" +msgstr "" + +msgid "so the column has been left as type '" +msgstr "" + +msgid "key argument of data.table() must be a character vector naming columns (NB: col.names are applied before this)" +msgstr "" + +msgid "index argument of data.table() must be a character vector naming columns (NB: col.names are applied before this)" +msgstr "" + +msgid "dateTimeAs must be a single string" +msgstr "" + +msgid "dateTimeAs must be 'ISO','squash','epoch' or 'write.csv'" +msgstr "" + +msgid "logicalAsInt has been renamed logical01. Use logical01 only, not both." +msgstr "" + +msgid "x being coerced from class: matrix to data.table" +msgstr "" + +msgid "Input has no columns; doing nothing." +msgstr "" + +msgid "If you intended to overwrite the file at" +msgstr "" + +msgid "with an empty one, please use file.remove first." +msgstr "" + +msgid "Input has no columns; creating an empty file at '" +msgstr "" + +msgid "' and exiting." +msgstr "" + +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 "" + +msgid "Argument 'x' must be a data.table object" +msgstr "" + +msgid "Argument 'by' must be a character vector of column names used in grouping." +msgstr "" + +msgid "Argument 'id' must be a logical scalar." +msgstr "" + +msgid "Argument 'x' is a 0-column data.table; no measure to apply grouping over." +msgstr "" + +msgid "Input data.table must not contain duplicate column names." +msgstr "" + +msgid "Argument 'by' must have unique column names for grouping." +msgstr "" + +msgid "Argument 'sets' must be a list of character vectors." +msgstr "" + +msgid "All columns used in 'sets' argument must be in 'by' too. Columns used in 'sets' but not present in 'by':" +msgstr "" + +msgid "When using `id=TRUE` the 'x' data.table must not have a column named 'grouping'." +msgstr "" + +msgid "Character vectors in 'sets' list must not have duplicated column names within a single grouping set." +msgstr "" + +msgid "'sets' contains a duplicate (i.e., equivalent up to sorting) element at index" +msgstr "" + +msgid "; 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 "" + +msgid "Expression passed to grouping sets function must not update by reference. Use ':=' on results of your grouping function." +msgstr "" + +msgid "When using `id=TRUE` the 'j' expression must not evaluate to a column named 'grouping'." +msgstr "" + +msgid "There exists duplicated column names in the results, ensure the column passed/evaluated in `j` and those in `by` are not overlapping." +msgstr "" + +msgid "Using integer64 class columns require to have 'bit64' package installed." +msgstr "" + +msgid "internal error, package:xts is on search path but could not be loaded via requireNamespace" +msgstr "" + +msgid "Argument 'sort' should be logical TRUE/FALSE" +msgstr "" + +msgid "Argument 'no.dups' should be logical TRUE/FALSE" +msgstr "" + +msgid "You are trying to join data.tables where" +msgstr "" + +msgid "'x' and 'y' arguments are" +msgstr "" + +msgid "'x' argument is" +msgstr "" + +msgid "'y' argument is" +msgstr "" + +msgid "0 columns data.table." +msgstr "" + +msgid "`by.x` and `by.y` must be of same length." +msgstr "" + +msgid "Supplied both `by` and `by.x/by.y`. `by` argument will be ignored." +msgstr "" + +msgid "A non-empty vector of column names are required for `by.x` and `by.y`." +msgstr "" + +msgid "Elements listed in `by.x` must be valid column names in x." +msgstr "" + +msgid "Elements listed in `by.y` must be valid column names in y." +msgstr "" + +msgid "A non-empty vector of column names for `by` is required." +msgstr "" + +msgid "Elements listed in `by` must be valid column names in x and y" +msgstr "" + +msgid "column names" +msgstr "" + +msgid "are duplicated in the result" +msgstr "" + +msgid "IN DEVELOPMENT built" +msgstr "" + +msgid "using" +msgstr "" + +msgid "threads (see ?getDTthreads). Latest news: r-datatable.com" +msgstr "" + +msgid "TRANSLATION CHECK" +msgstr "" + +msgid "**********" +msgstr "" + +msgid "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" +msgstr "" + +msgid "**********\nThis development version of data.table was built more than 4 weeks ago. Please update: data.table::update.dev.pkg()\n**********" +msgstr "" + +msgid "**********\nThis installation of data.table has not detected OpenMP support. It should still work but in single-threaded mode." +msgstr "" + +msgid "If this is a Mac, please ensure you are using R>=3.4.0 and have followed our Mac instructions here: https://github.com/Rdatatable/data.table/wiki/Installation." +msgstr "" + +msgid "This warning message should not occur on Windows or Linux. If it does, please file a GitHub issue.\n**********" +msgstr "" + +msgid "There is no" +msgstr "" + +msgid "package in provided repository." +msgstr "" + +msgid "The option 'datatable.nomatch' is being used and is not set to the default NA. This option is still honored for now but will be deprecated in future. Please see NEWS for 1.12.4 for detailed information and motivation. To specify inner join, please specify `nomatch=NULL` explicitly in your calls rather than changing the default using this option." +msgstr "" + +msgid "The datatable." +msgstr "" + +msgid "version (" +msgstr "" + +msgid ") does not match the package (" +msgstr "" + +msgid "). Please close all R sessions to release the old" +msgstr "" + +msgid "and reinstall data.table in a fresh R session. The root cause is that R's package installer can in some unconfirmed circumstances leave a package in a state that is apparently functional but where new R code is 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. Please help by adding precise circumstances to 17478 to move the status to confirmed. 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 "" + +msgid "This is R" +msgstr "" + +msgid "but data.table has been installed using R" +msgstr "" + +msgid ". The major version must match. Please reinstall data.table." +msgstr "" + +msgid "Option 'datatable.old.bywithoutby' has been removed as warned for 2 years. It is now ignored. Please use by=.EACHI instead and stop using this option." +msgstr "" + +msgid "Unexpected base R behaviour: list(x) has copied x" +msgstr "" + +msgid "Unexpected base R behaviour: names<- has copied column contents" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- did not copy column 2 which was assigned to" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- copied the first column which was not assigned to, too" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- has not copied address(DF)" +msgstr "" + +msgid "Reminder to data.table developers: don't use getRversion() internally. Add a behaviour test to .onLoad instead." +msgstr "" + +msgid "Provide either threads= or percent= but not both" +msgstr "" + +msgid "percent= is provided but is length" +msgstr "" + +msgid "percent==" +msgstr "" + +msgid "but should be a number between 2 and 100" +msgstr "" + +msgid "Valid options for col.names are 'auto', 'top', and 'none'" +msgstr "" + +msgid "Column classes will be suppressed when col.names is 'none'" +msgstr "" + +msgid "Internal structure doesn't seem to be a list. Possibly corrupt data.table." +msgstr "" + +msgid "x may no longer be the character name of the data.table. The possibility was undocumented and has been removed." +msgstr "" + +msgid "set2key() is now deprecated. Please use setindex() instead." +msgstr "" + +msgid "set2keyv() is now deprecated. Please use setindexv() instead." +msgstr "" + +msgid "key2() is now deprecated. Please use indices() instead." +msgstr "" + +msgid "key(x)<-value is deprecated and not supported. Please change to use setkey() with perhaps copy(). Has been warning since 2012 and will be an error in future." +msgstr "" + +msgid "x is not a data.table" +msgstr "" + +msgid "cols is not a character vector. Please see further information in ?setkey." +msgstr "" + +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 "" + +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 "" + +msgid "cols is the empty string. Use NULL to remove the key." +msgstr "" + +msgid "cols contains some blanks." +msgstr "" + +msgid "some columns are not in the data.table:" +msgstr "" + +msgid "x contains a column called '.xi'. Conflicts with internal use by data.table." +msgstr "" + +msgid "' is type '" +msgstr "" + +msgid "' which is not supported as a key column type, currently." +msgstr "" + +msgid "Internal error. 'cols' should be character at this point in setkey; please report." +msgstr "" + +msgid "Internal error: index '" +msgstr "" + +msgid "' exists but is invalid" +msgstr "" + +msgid "Use 'if (length(o <- forderv(DT,by))) ...' for efficiency in one step, so you have o as well if not sorted." +msgstr "" + +msgid "x is vector but 'by' is supplied" +msgstr "" + +msgid "x is a single vector, non-NULL 'by' doesn't make sense" +msgstr "" + +msgid "Attempting to order a 0-column data.table or data.frame." +msgstr "" + +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 "" + +msgid "Internal code should not be being called on type double" +msgstr "" + +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 "" + +msgid "New parallel sort has not been implemented for decreasing=TRUE so far. Using one thread." +msgstr "" + +msgid "New parallel sort has not been implemented for vectors containing NA values so far. Using one thread." +msgstr "" + +msgid "x must be a data.frame or data.table." +msgstr "" + +msgid "x must be a data.frame or data.table" +msgstr "" + +msgid "na.last must be logical TRUE/FALSE" +msgstr "" + +msgid "cols is not a character vector. Please see further information in ?setorder." +msgstr "" + +msgid "cols is a character vector of zero length. Use NULL instead, or wrap with suppressWarnings() to avoid this warning." +msgstr "" + +msgid "' which is not supported for ordering currently." +msgstr "" + +msgid "'sorted' is TRUE but element" +msgstr "" + +msgid "is non-atomic, which can't be sorted; try setting sorted = FALSE" +msgstr "" + +msgid "Cross product of elements provided to CJ() would result in" +msgstr "" + +msgid "rows which exceeds .Machine$integer.max ==" +msgstr "" + +msgid "x and y must both be data.tables" +msgstr "" + +msgid "length(by.x) != length(by.y)" +msgstr "" + +msgid "When x's column ('" +msgstr "" + +msgid "') is character, the corresponding column in y ('" +msgstr "" + +msgid "') should be factor or character, but found incompatible type '" +msgstr "" + +msgid "') is factor, the corresponding column in y ('" +msgstr "" + +msgid "') should be character or factor, but found incompatible type '" +msgstr "" + +msgid "') is integer or numeric, the corresponding column in y ('" +msgstr "" + +msgid "') can not be character or logical types, but found incompatible type '" +msgstr "" + +msgid "argument 'all' should be logical of length one" +msgstr "" + +msgid "x and y must have the same column names" +msgstr "" + +msgid "x and y must have the same column order" +msgstr "" + +msgid "unsupported column type" +msgstr "" + +msgid "found in x or y:" +msgstr "" + +msgid "of x is '" +msgstr "" + +msgid "' but the corresponding item of y is '" +msgstr "" + +msgid "None of the datasets should contain a column named '.seqn'" +msgstr "" + +msgid "'target' and 'current' must both be data.tables" +msgstr "" + +msgid "Internal error: ncol(current)==ncol(target) was checked above" +msgstr "" + +msgid "None of the datasets to compare should contain a column named '.seqn'" +msgstr "" + +msgid "Datasets to compare with 'ignore.row.order' must not have unsupported column types:" +msgstr "" + +msgid "Argument 'tolerance' was forced to lowest accepted value `sqrt(.Machine$double.eps)` from provided" +msgstr "" + +msgid "Duplicate rows in datasets, numeric columns and ignore.row.order cannot be used with non 0 tolerance argument" +msgstr "" + +msgid "Factor columns and ignore.row.order cannot be used with non 0 tolerance argument" +msgstr "" + +msgid "Internal error: factor type mismatch should have been caught earlier" +msgstr "" + +msgid "argument 'fill' ignored, only make sense for type='const'" +msgstr "" + +msgid "order.col='" +msgstr "" + +msgid "' not a column name of info" +msgstr "" + +msgid "data.table package is loaded. Unload or start a fresh R session." +msgstr "" + +msgid "script must end with '.Rraw'. If a file ending '.Rraw.bz2' exists, that will be found and used." +msgstr "" + +msgid "Neither" +msgstr "" + +msgid "exist in" +msgstr "" + +msgid "Timings count mismatch:" +msgstr "" + +msgid "vs" +msgstr "" + +msgid "out of" +msgstr "" + +msgid "in" +msgstr "" + +msgid "on" +msgstr "" + +msgid ". [" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "for test number" +msgstr "" + +msgid "Test" +msgstr "" + +msgid "is invalid: when error= is provided it does not make sense to pass y as well" +msgstr "" + +msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" +msgstr "" + +msgid "make.names='" +msgstr "" + +msgid "' not found in names of input" +msgstr "" + +msgid "make.names=" +msgstr "" + +msgid "is out of range [1,ncol=" +msgstr "" + +msgid "'names' must be TRUE/FALSE or a character vector." +msgstr "" + +msgid "'keep' should contain integer values between" +msgstr "" + +msgid "length(names) (=" +msgstr "" + +msgid ") is not equal to length(" +msgstr "" + +msgid ") (=" +msgstr "" + +msgid ")." +msgstr "" + +msgid "l not type list" +msgstr "" + +msgid "x not boolean" +msgstr "" + +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 "" + +msgid "Pattern" +msgstr "" + +msgid "not found: [" +msgstr "" + +msgid "Input xts object should not have 'index' column because it would result in duplicate column names. Rename 'index' column in xts or use `keep.rownames=FALSE` and add index manually as another column." +msgstr "" + +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 "" + +msgid "Following columns are not numeric and will be omitted:" +msgstr "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po new file mode 100644 index 0000000000..dfedd84c70 --- /dev/null +++ b/po/R-zh_CN.po @@ -0,0 +1,2141 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.5\n" +"POT-Creation-Date: 2019-10-21 16:15\n" +"PO-Revision-Date: 2019-10-04 17:06+08\n" +"Last-Translator: Michael Chirico \n" +"Language-Team: Mandarin\n" +"Language: Mandarin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "data.table package loaded. When developing don't load package" +msgstr "" + +msgid "" +"Internal error -- difftime objects may not be added to IDate, but Ops " +"dispatch should have intervened to prevent this" +msgstr "" + +msgid "binary + is not defined for \"IDate\" objects" +msgstr "" + +msgid "can only subtract from \"IDate\" objects" +msgstr "" + +msgid "Internal error: storage mode of IDate is somehow no longer integer" +msgstr "" + +msgid "unary - is not defined for \"IDate\" objects" +msgstr "" + +msgid "" +"Internal error -- difftime objects may not be subtracted from IDate, but Ops " +"dispatch should have intervened to prevent this" +msgstr "" + +msgid "Valid options for ms are 'truncate'," +msgstr "" + +msgid "'nearest', and 'ceil'." +msgstr "" + +msgid "" +"as.data.table.array method should only be called for arrays with 3+ " +"dimensions; use the matrix method for 2-dimensional arrays" +msgstr "" + +msgid "" +"Argument 'value.name' must be scalar character, non-NA and at least one " +"character" +msgstr "" + +msgid "Argument 'sorted' must be scalar logical and non-NA" +msgstr "" + +msgid "Argument 'na.rm' must be scalar logical and non-NA" +msgstr "" + +msgid "Please provide either 'key' or 'sorted', but not both." +msgstr "" + +msgid "Argument 'value.name' should not overlap with column names in result:" +msgstr "" + +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 "" + +msgid "Item" +msgstr "" + +msgid "has" +msgstr "" + +msgid "rows but longest item has" +msgstr "" + +msgid "; recycled with remainder." +msgstr "" + +msgid "has 0 rows but longest item has" +msgstr "" + +msgid "; filled with NA" +msgstr "" + +msgid "A column may not be called .SD. That has special meaning." +msgstr "" + +msgid "class must be length 1" +msgstr "" + +msgid "between has been passed an argument x of type logical" +msgstr "" + +msgid "" +"'between' function the 'x' argument is a POSIX class while 'lower' was not, " +"coercion to POSIX failed with:" +msgstr "" + +msgid "" +"'between' function the 'x' argument is a POSIX class while 'upper' was not, " +"coercion to POSIX failed with:" +msgstr "" + +msgid "" +"'between' lower= and upper= are both POSIXct but have different tzone " +"attributes:" +msgstr "" + +msgid ". Please align their time zones." +msgstr "" + +msgid "" +"'between' arguments are all POSIXct but have mismatched tzone attributes:" +msgstr "" + +msgid ". The UTC times will be compared." +msgstr "" + +msgid "trying to use integer64 class when 'bit64' package is not installed" +msgstr "" + +msgid "" +"Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" +msgstr "" + +msgid "Some lower>upper for this non-numeric and non-character type" +msgstr "" + +msgid "RHS has length()" +msgstr "" + +msgid "; expecting length 2." +msgstr "" + +msgid "c" +msgstr "" + +msgid "Perhaps you meant %s?" +msgstr "" + +msgid "The first element should be the lower bound(s);" +msgstr "" + +msgid "the second element should be the upper bound(s)." +msgstr "" + +msgid "x." +msgstr "" + +msgid "is type" +msgstr "" + +msgid "which is not supported by data.table join" +msgstr "" + +msgid "i." +msgstr "" + +msgid "Attempting roll join on factor column when joining x." +msgstr "" + +msgid "to i." +msgstr "" + +msgid ". Only integer, double or character columns may be roll joined." +msgstr "" + +msgid "Incompatible join types: x." +msgstr "" + +msgid "(" +msgstr "" + +msgid ") and i." +msgstr "" + +msgid "). Factor columns must join to factor or character columns." +msgstr "" + +msgid ")" +msgstr "" + +msgid "Incompatible join types:" +msgstr "" + +msgid "is type integer64 but" +msgstr "" + +msgid "is type double and contains fractions" +msgstr "" + +msgid "roll is not implemented for non-equi joins yet." +msgstr "" + +msgid "Column name '_nqgrp_' is reserved for non-equi joins." +msgstr "" + +msgid "key argument of data.table() must be character" +msgstr "" + +msgid "Object '" +msgstr "" + +msgid "' not found. Perhaps you intended" +msgstr "" + +msgid "," +msgstr "" + +msgid "or" +msgstr "" + +msgid "more" +msgstr "" + +msgid "' not found amongst" +msgstr "" + +msgid "and" +msgstr "" + +msgid "Provide either by= or keyby= but not both" +msgstr "" + +msgid "Ignoring keyby= because j= is not supplied" +msgstr "" + +msgid "Ignoring by= because j= is not supplied" +msgstr "" + +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 '" +msgstr "" + +msgid "'." +msgstr "" + +msgid "" +"i and j are both missing so ignoring the other arguments. This warning will " +"be upgraded to error in future." +msgstr "" + +msgid "mult argument can only be 'first', 'last' or 'all'" +msgstr "" + +msgid "" +"roll must be a single TRUE, FALSE, positive/negative integer/double " +"including +Inf and -Inf or 'nearest'" +msgstr "" + +msgid "roll is '" +msgstr "" + +msgid "' (type character). Only valid character value is 'nearest'." +msgstr "" + +msgid "rollends must be a logical vector" +msgstr "" + +msgid "rollends must be length 1 or 2" +msgstr "" + +msgid "" +"nomatch= must be either NA or NULL (or 0 for backwards compatibility which " +"is the same as NULL)" +msgstr "" + +msgid "which= must be a logical vector length 1. Either FALSE, TRUE or NA." +msgstr "" + +msgid "which==" +msgstr "" + +msgid "" +"(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 "" + +msgid "" +"which=NA with nomatch=0 would always return an empty vector. Please change " +"or remove either which or nomatch." +msgstr "" + +msgid "j must be provided when with=FALSE" +msgstr "" + +msgid "" +"The symbol .. is invalid. The .. prefix must be followed by at least one " +"character." +msgstr "" + +msgid "Variable '" +msgstr "" + +msgid "" +"' is not found in calling scope. Looking in calling scope because you used " +"the .. prefix." +msgstr "" + +msgid "Variable '.." +msgstr "" + +msgid "" +"' does exist in calling scope though, so please just removed the .. prefix " +"from that variable name in calling scope." +msgstr "" + +msgid "Both '" +msgstr "" + +msgid "' and '.." +msgstr "" + +msgid "' exist in calling scope. Please remove the '.." +msgstr "" + +msgid "' variable in calling scope for clarity." +msgstr "" + +msgid "" +"Internal error: DT[, ..var] should be dealt with by the branch above now." +msgstr "" + +msgid "" +"' 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 "" + +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 "" + +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 "" + +msgid "nomatch isn't relevant together with :=, ignoring nomatch" +msgstr "" + +msgid "" +"not-join '!' prefix is present on i but nomatch is provided. Please remove " +"nomatch." +msgstr "" + +msgid "is not found in calling scope" +msgstr "" + +msgid "" +"When the first argument inside DT[...] is a single symbol (e.g. DT[var]), " +"data.table looks for var in calling scope." +msgstr "" + +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 "" + +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 "" + +msgid "Attempting to do natural join but no common columns in provided tables" +msgstr "" + +msgid "Internal error. Cannot by=.EACHI when joining to a secondary key, yet" +msgstr "" + +msgid "Internal error. irows has length in by=.EACHI" +msgstr "" + +msgid "logical error. i is not a data.table, but 'on' argument is provided." +msgstr "" + +msgid "i has evaluated to type" +msgstr "" + +msgid ". Expecting logical, integer or double." +msgstr "" + +msgid "i evaluates to a logical vector length" +msgstr "" + +msgid "but there are" +msgstr "" + +msgid "" +"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 "" + +msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" +msgstr "" + +msgid "" +"with=FALSE together with := was deprecated in v1.9.4 released Oct 2014. " +"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. As warned in 2014, this is now a warning." +msgstr "" + +msgid "" +"with=FALSE ignored, it isn't needed when using :=. See ?':=' for examples." +msgstr "" + +msgid "column(s) not removed because not found:" +msgstr "" + +msgid "column(s) not found:" +msgstr "" + +msgid "of j is" +msgstr "" + +msgid "which is outside the column number range [1,ncol=" +msgstr "" + +msgid "]" +msgstr "" + +msgid "j mixes positives and negatives" +msgstr "" + +msgid "" +"When with=FALSE, j-argument should be of type logical/character/integer " +"indicating the columns to select." +msgstr "" + +msgid "by=c(...), key(...) or names(...) must evaluate to 'character'" +msgstr "" + +msgid "'by' is a character vector length" +msgstr "" + +msgid "" +"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 "" + +msgid "Internal error: irows isn't integer" +msgstr "" + +msgid "" +"'by' appears to evaluate to column names but isn't c() or key(). Use " +"by=list(...) if you can. Otherwise, by=eval" +msgstr "" + +msgid "" +"should work. This is for efficiency so data.table can detect which columns " +"are needed." +msgstr "" + +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 "" + +msgid "column or expression" +msgstr "" + +msgid "of 'by' or 'keyby' is type" +msgstr "" + +msgid "" +". Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]" +msgstr "" + +msgid "The items in the 'by' or 'keyby' list are length (" +msgstr "" + +msgid "). Each must be length" +msgstr "" + +msgid "" +"; the same length as there are rows in x (after subsetting if i is provided)." +msgstr "" + +msgid "of the .() or list() passed to j is missing" +msgstr "" + +msgid ".SDcols missing at the following indices:" +msgstr "" + +msgid ".SDcols is numeric but has both +ve and -ve indices" +msgstr "" + +msgid ".SDcols is numeric but out of bounds [1," +msgstr "" + +msgid "] at:" +msgstr "" + +msgid ".SDcols should be column numbers or names" +msgstr "" + +msgid "Some items of .SDcols are not column names:" +msgstr "" + +msgid "" +"This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?" +"data.table." +msgstr "" + +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 "" + +msgid "In `:=`(col1=val1, col2=val2, ...) form, all arguments must be named." +msgstr "" + +msgid "" +"LHS of := must be a symbol, or an atomic vector (column names or positions)." +msgstr "" + +msgid "" +"LHS of := appears to be column positions but are outside [1,ncol] range. New " +"columns can only be added by name." +msgstr "" + +msgid "" +"LHS of := isn't column names ('character') or positions ('integer' or " +"'numeric')" +msgstr "" + +msgid "" +"Invalid .internal.selfref detected and fixed by taking a (shallow) copy of " +"the data.table so that := can add this new column by reference. At an " +"earlier point, this data.table has been 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. 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 "" + +msgid "" +"Cannot assign to an under-allocated recursively indexed list -- L[[i]][,:=] " +"syntax is only valid when i is length 1, but it's length" +msgstr "" + +msgid "Internal error -- item '" +msgstr "" + +msgid "' not found in names of list" +msgstr "" + +msgid "Internal error -- column(s) not found:" +msgstr "" + +msgid "" +"strptime() usage detected and wrapped with as.POSIXct(). This is to minimize " +"the chance of assigning POSIXlt columns, which use 40+ bytes to store one " +"date (versus 8 for POSIXct). Use as.POSIXct() (which will call strptime() as " +"needed internally) to avoid this warning." +msgstr "" + +msgid "" +"' is not found in calling scope. Looking in calling scope because this " +"symbol was prefixed with .. in the j= parameter." +msgstr "" + +msgid "Internal error: xcolAns does not pass checks:" +msgstr "" + +msgid "" +"Internal error: irows is NULL when making join result at R level. Should no " +"longer happen now we use CsubsetDT earlier." +msgstr "" + +msgid "j (the 2nd argument inside [...]) is a single symbol but column name '" +msgstr "" + +msgid "' is not found. Perhaps you intended DT[, .." +msgstr "" + +msgid "" +"]. This difference to data.frame is deliberate and explained in FAQ 1.1." +msgstr "" + +msgid "" +"Internal error: j has created a data.table result containing a NULL column" +msgstr "" + +msgid "" +"The column '.N' can't be grouped because it conflicts with the special .N " +"variable. Try setnames(DT,'.N','N') first." +msgstr "" + +msgid "" +"The column '.I' can't be grouped because it conflicts with the special .I " +"variable. Try setnames(DT,'.I','I') first." +msgstr "" + +msgid "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" +msgstr "" + +msgid "Internal error: by= is missing" +msgstr "" + +msgid "Internal error: byindex not the index name" +msgstr "" + +msgid "Internal error: byindex not found" +msgstr "" + +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 "" + +msgid "Internal error: length(irows)!=length(o__)" +msgstr "" + +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 "" + +msgid "Internal error: jvnames is length" +msgstr "" + +msgid "but ans is" +msgstr "" + +msgid "and bynames is" +msgstr "" + +msgid "rownames and rownames.value cannot both be used at the same time" +msgstr "" + +msgid "length(rownames)==" +msgstr "" + +msgid "but nrow(DT)==" +msgstr "" + +msgid "" +". The rownames argument specifies a single column name or number. Consider " +"rownames.value= instead." +msgstr "" + +msgid "" +"length(rownames)==0 but should be a single column name or number, or NULL" +msgstr "" + +msgid "rownames is TRUE but key has multiple columns" +msgstr "" + +msgid "; taking first column x[,1] as rownames" +msgstr "" + +msgid "'" +msgstr "" + +msgid "' is not a column of x" +msgstr "" + +msgid "as.integer(rownames)==" +msgstr "" + +msgid "]." +msgstr "" + +msgid "length(rownames.value)==" +msgstr "" + +msgid "but should be nrow(x)==" +msgstr "" + +msgid "" +"When i is a matrix in DT[i]<-value syntax, it doesn't make sense to provide j" +msgstr "" + +msgid "j must be an atomic vector, see ?is.atomic" +msgstr "" + +msgid "NA in j" +msgstr "" + +msgid "j must be vector of column name or positions" +msgstr "" + +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 "" + +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 "" + +msgid "attempting to assign invalid object to dimnames of a data.table" +msgstr "" + +msgid "data.tables do not have rownames" +msgstr "" + +msgid "Can't assign" +msgstr "" + +msgid "colnames to a" +msgstr "" + +msgid "-column data.table" +msgstr "" + +msgid "'subset' must evaluate to logical" +msgstr "" + +msgid "Argument 'invert' must be logical TRUE/FALSE" +msgstr "" + +msgid "x argument must be a data.table" +msgstr "" + +msgid "group length is 0 but data nrow > 0" +msgstr "" + +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 "" + +msgid "Either 'by' or 'f' argument must be supplied" +msgstr "" + +msgid "Column '.ll.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Column '.nm.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Argument 'by' must refer to column names in x" +msgstr "" + +msgid "" +"Argument 'by' must refer only to atomic-type columns, but the following " +"columns are non-atomic:" +msgstr "" + +msgid "" +"x is not a data.table. Shallow copy is a copy of the vector of column " +"pointers (only), so is only meaningful for data.table" +msgstr "" + +msgid "setalloccol attempting to modify `*tmp*`" +msgstr "" + +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 "" + +msgid "x is not a data.table or data.frame" +msgstr "" + +msgid "x has" +msgstr "" + +msgid "columns but its names are length" +msgstr "" + +msgid "Passed a vector of type '" +msgstr "" + +msgid "'. Needs to be type 'character'." +msgstr "" + +msgid "names to a" +msgstr "" + +msgid "column data.table" +msgstr "" + +msgid "When 'new' is provided, 'old' must be provided too" +msgstr "" + +msgid "'new' is not a character vector or a function" +msgstr "" + +msgid "NA in 'new' at positions" +msgstr "" + +msgid "Some duplicates exist in 'old':" +msgstr "" + +msgid "'old' is type" +msgstr "" + +msgid "but should be integer, double or character" +msgstr "" + +msgid "'old' is length" +msgstr "" + +msgid "but 'new' is length" +msgstr "" + +msgid "NA (or out of bounds) in 'old' at positions" +msgstr "" + +msgid "of 'old' is '" +msgstr "" + +msgid "" +"' which appears several times in column names. Just the first will be " +"changed. There are" +msgstr "" + +msgid "other items in old that are also duplicated in column names." +msgstr "" + +msgid "Items of 'old' not found in column names:" +msgstr "" + +msgid ". Consider skip_absent=TRUE." +msgstr "" + +msgid "Internal error: length(i)!=length(new)" +msgstr "" + +msgid "x has some duplicated column name(s):" +msgstr "" + +msgid ". Please remove or rename the duplicate(s) and try again." +msgstr "" + +msgid "Input is" +msgstr "" + +msgid "but should be a plain list of items to be stacked" +msgstr "" + +msgid "" +"idcol must be a logical or character vector of length 1. If logical TRUE the " +"id column will named '.id'." +msgstr "" + +msgid "use.names=NA invalid" +msgstr "" + +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 "" + +msgid "" +"Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are " +"defined for use in j, once only and in particular ways. See help(\":=\")." +msgstr "" + +msgid "" +"setDF only accepts data.table, data.frame or list of equal length as input" +msgstr "" + +msgid "rownames contains duplicates" +msgstr "" + +msgid "rownames incorrect length; expected" +msgstr "" + +msgid "names, got" +msgstr "" + +msgid "All elements in argument 'x' to 'setDF' must be of same length" +msgstr "" + +msgid "Cannot find symbol" +msgstr "" + +msgid "Cannot convert '" +msgstr "" + +msgid "" +"' to data.table by reference because binding is locked. It is very likely " +"that '" +msgstr "" + +msgid "" +"' 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 "" + +msgid "Some columns are a multi-column type (such as a matrix column):" +msgstr "" + +msgid "" +". 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 "" + +msgid "Column" +msgstr "" + +msgid "" +"is of POSIXlt type. Please convert it to POSIXct using as.POSIXct and run " +"setDT again. We do not recommend use of POSIXlt at all because it uses 40 " +"bytes to store one date." +msgstr "" + +msgid "" +"All elements in argument 'x' to 'setDT' must be of same length, but the " +"profile of input lengths (length:frequency) is:" +msgstr "" + +msgid "%s:%d" +msgstr "" + +msgid "The first entry with fewer than" +msgstr "" + +msgid "entries is" +msgstr "" + +msgid "" +"Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table'" +msgstr "" + +msgid "Item '" +msgstr "" + +msgid "' not found in names of input list" +msgstr "" + +msgid "'prefix' must be NULL or a character vector of length 1." +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense." +msgstr "" + +msgid "x is a list, 'cols' cannot be 0-length." +msgstr "" + +msgid "RHS of" +msgstr "" + +msgid "is length" +msgstr "" + +msgid "which is not 1 or nrow (" +msgstr "" + +msgid "" +"). For robustness, no recycling is allowed (other than of length 1 RHS). " +"Consider %in% instead." +msgstr "" + +msgid "" +"Internal error in .isFastSubsettable. Please report to data.table developers" +msgstr "" + +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 "" + +msgid "Found more than one operator in one 'on' statement:" +msgstr "" + +msgid ". Please specify a single operator." +msgstr "" + +msgid "'on' contains no column name:" +msgstr "" + +msgid ". Each 'on' clause must contain one or two column names." +msgstr "" + +msgid "'on' contains more than 2 column names:" +msgstr "" + +msgid "Invalid operators" +msgstr "" + +msgid ". Only allowed operators are" +msgstr "" + +msgid "." +msgstr "" + +msgid "'fromLast' must be TRUE or FALSE" +msgstr "" + +msgid "x must be an atomic vector or data.frames/data.tables" +msgstr "" + +msgid "Using '" +msgstr "" + +msgid "' as value column. Use 'value.var' to override" +msgstr "" + +msgid "The dcast generic in data.table has been passed a" +msgstr "" + +msgid "" +", but data.table::dcast currently only has a method for data.tables. Please " +"confirm your input is a data.table, with setDT(" +msgstr "" + +msgid ") or as.data.table(" +msgstr "" + +msgid "" +"). If you intend to use a reshape2::dcast, try installing that package " +"first, but do note that reshape2 is deprecated and you should be migrating " +"your code away from using it." +msgstr "" + +msgid "" +"and will attempt to redirect to the reshape2::dcast; please note that " +"reshape2 is deprecated, and this redirection is now deprecated as well. " +"Please do this redirection yourself like reshape2::dcast(" +msgstr "" + +msgid "). In the next version, this warning will become an error." +msgstr "" + +msgid "" +"Invalid formula. Cast formula should be of the form LHS ~ RHS, for e.g., a + " +"b ~ c." +msgstr "" + +msgid "data.table to cast must have unique column names" +msgstr "" + +msgid "value.var values [" +msgstr "" + +msgid "] are not found in 'data'." +msgstr "" + +msgid "" +"When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be " +"either of length =1 or =length(fun.aggregate)." +msgstr "" + +msgid "'data' must be a data.table." +msgstr "" + +msgid "'drop' must be logical TRUE/FALSE" +msgstr "" + +msgid "Column [" +msgstr "" + +msgid "] not found or of unknown type." +msgstr "" + +msgid "Columns specified in formula can not be of type list" +msgstr "" + +msgid "Can not cast an empty data.table" +msgstr "" + +msgid "Aggregate function missing, defaulting to 'length'" +msgstr "" + +msgid "Internal error -- empty rhsnames in dcast; please report" +msgstr "" + +msgid "The melt generic in data.table has been passed a" +msgstr "" + +msgid "" +", but data.table::melt currently only has a method for data.tables. Please " +"confirm your input is a data.table, with setDT(" +msgstr "" + +msgid "" +"). If you intend to use a method from reshape2, try installing that package " +"first, but do note that reshape2 is deprecated and you should be migrating " +"your code away from using it." +msgstr "" + +msgid "" +"and will attempt to redirect to the relevant reshape2 method; please note " +"that reshape2 is deprecated, and this redirection is now deprecated as well. " +"To continue using melt methods from reshape2 while both libraries are " +"attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(" +msgstr "" + +msgid "Input patterns must be of type character." +msgstr "" + +msgid "'data' must be a data.table" +msgstr "" + +msgid "'value.name' provided in both 'measure.vars'" +msgstr "" + +msgid "and 'value.name argument'; value provided in" +msgstr "" + +msgid "'measure.vars' is given precedence." +msgstr "" + +msgid "Please provide a name to each element of 'measure.vars'." +msgstr "" + +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 "" + +msgid "maxgap must be a non-negative integer value of length 1" +msgstr "" + +msgid "minoverlap must be a positive integer value of length 1" +msgstr "" + +msgid "which must be a logical vector of length 1. Either TRUE/FALSE" +msgstr "" + +msgid "nomatch must either be NA or NULL" +msgstr "" + +msgid "maxgap and minoverlap arguments are not yet implemented." +msgstr "" + +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 "" + +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 "" + +msgid "" +"Invalid numeric value for 'by.x'; it should be a vector with values 1 <= by." +"x <= length(x)" +msgstr "" + +msgid "" +"Invalid numeric value for 'by.y'; it should be a vector with values 1 <= by." +"y <= length(y)" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.x" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.y" +msgstr "" + +msgid "The first" +msgstr "" + +msgid "columns of y's key must be identical to the columns specified in by.y." +msgstr "" + +msgid "Elements listed in 'by.x' must be valid names in data.table 'x'" +msgstr "" + +msgid "" +"Duplicate columns are not allowed in overlap joins. This may change in the " +"future." +msgstr "" + +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 "" + +msgid "y has some duplicated column name(s):" +msgstr "" + +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 "" + +msgid "NA values in data.table 'x' start column: '" +msgstr "" + +msgid "" +"'. All rows with NA values in the range columns must be removed for " +"foverlaps() to work." +msgstr "" + +msgid "NA values in data.table 'x' end column: '" +msgstr "" + +msgid "All entries in column" +msgstr "" + +msgid "should be <= corresponding entries in column" +msgstr "" + +msgid "in data.table 'x'." +msgstr "" + +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 "" + +msgid "NA values in data.table 'y' start column: '" +msgstr "" + +msgid "NA values in data.table 'y' end column: '" +msgstr "" + +msgid "in data.table 'y'." +msgstr "" + +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 "" + +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 "" + +msgid "Not yet implemented" +msgstr "" + +msgid "maxgap > minoverlap. maxgap will have no effect here." +msgstr "" + +msgid "length(na.last) = 0" +msgstr "" + +msgid "length(na.last) > 1, only the first element will be used" +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense" +msgstr "" + +msgid "x is a list, 'cols' can not be 0-length" +msgstr "" + +msgid "Used more than one of the arguments input=, file=, text= and cmd=." +msgstr "" + +msgid "Argument 'encoding' must be 'unknown', 'UTF-8' or 'Latin-1'." +msgstr "" + +msgid "'text=' is type" +msgstr "" + +msgid "but must be character." +msgstr "" + +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 "" + +msgid "" +"input= contains no \\n or \\r, but starts with a space. Please remove the " +"leading space, or use text=, file= or cmd=" +msgstr "" + +msgid "" +"Input URL requires https:// connection for which fread() requires 'curl' " +"package which cannot be found. Please install 'curl' using 'install." +"packages('curl')'." +msgstr "" + +msgid "Taking input= as a system command ('" +msgstr "" + +msgid "" +"') and a variable has been used in the expression passed to `input=`. Please " +"use fread(cmd=...). There is a security concern if you are creating an app, " +"and 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 "" + +msgid "File '" +msgstr "文件'" + +msgid "' does not exist or is non-readable. getwd()=='" +msgstr "" + +msgid "' is a directory. Not yet implemented." +msgstr "'是个目录。还没有编程实现。" + +msgid "' has size 0. Returning a NULL" +msgstr "" + +msgid "data.table" +msgstr "" + +msgid "data.frame" +msgstr "" + +msgid "" +"To read gz and bz2 files directly, fread() requires 'R.utils' package which " +"cannot be found. Please install 'R.utils' using 'install.packages('R." +"utils')'." +msgstr "" + +msgid "" +"'autostart' is now deprecated and ignored. Consider skip='string' or skip=n" +msgstr "" + +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 "" + +msgid "colClasses is not type list or character vector" +msgstr "" + +msgid "" +"colClasses=\"NULL\" (quoted) is interpreted as colClasses=NULL (the default) " +"as opposed to dropping every column." +msgstr "" + +msgid "" +"strip.white==TRUE (default) and \"\" is present in na.strings, so any number " +"of spaces in string columns will already be read as ." +msgstr "" + +msgid "" +"Since strip.white=TRUE (default), use na.strings=\"\" to specify that any " +"number of spaces in a string column should be read as ." +msgstr "" + +msgid "" +"But strip.white=FALSE. Use strip.white=TRUE (default) together with na." +"strings=\"\" to turn any number of spaces in string columns into " +msgstr "" + +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 "" + +msgid "" +"Combining a search string as 'skip' and reading a YAML header may not work " +"as expected -- currently," +msgstr "" + +msgid "" +"reading will proceed to search for 'skip' from the beginning of the file, " +"NOT from the end of" +msgstr "" + +msgid "" +"the metadata; please file an issue on GitHub if you'd like to see more " +"intuitive behavior supported." +msgstr "" + +msgid "Encountered <" +msgstr "" + +msgid "..." +msgstr "" + +msgid "> at the first" +msgstr "" + +msgid "unskipped line (" +msgstr "" + +msgid "), which does not constitute the start to a valid YAML header" +msgstr "" + +msgid "(expecting something matching regex \"" +msgstr "" + +msgid "\"); please check your input and try again." +msgstr "" + +msgid "" +"Reached the end of the file before finding a completion to the YAML header. " +"A valid YAML header is bookended by lines matching" +msgstr "" + +msgid "the regex \"" +msgstr "" + +msgid "\". Please double check the input file is a valid csvy." +msgstr "从这里开始" + +msgid "User-supplied 'header' will override that found in metadata." +msgstr "用户æä¾›çš„“headerâ€å°†è¦†ç›–元数æ®ä¸­çš„列å" + +msgid "" +"User-supplied column names in 'col.names' will override those found in YAML " +"metadata." +msgstr "用户在“col.namesâ€ä¸­æä¾›çš„列å将覆盖在YAML元数æ®ä¸­æ‰¾åˆ°çš„列å" + +msgid "" +"colClasses dictated by user input and those read from YAML header are in " +"conflict (specifically, for column" +msgstr "用户输入指定的列类型和从YAML列å中读å–的列类型å‘生冲çªï¼ˆç‰¹åˆ«æ˜¯column" + +msgid "s" +msgstr "s" + +msgid "[" +msgstr "[" + +msgid "]); the proceeding assumes the user input was" +msgstr "]); 该过程å‡å®šç”¨æˆ·è¾“入的是" + +msgid "" +"an intentional override and will ignore the types implied by the YAML " +"header; please exclude" +msgstr "有æ„覆盖的,并且将忽略YAMLåˆ—åæ‰€æŒ‡ç¤ºçš„类型;" + +msgid "these columns" +msgstr "这些列" + +msgid "this column from colClasses if this was unintentional." +msgstr "如果是无æ„的,请排除colClasses中的此列" + +msgid "User-supplied 'sep' will override that found in metadata." +msgstr "用户æä¾›çš„“sepâ€å°†è¦†ç›–元数æ®ä¸­çš„分隔符" + +msgid "User-supplied 'quote' will override that found in metadata." +msgstr "用户æä¾›çš„“quoteâ€å°†è¦†ç›–元数æ®ä¸­çš„引å·" + +msgid "User-supplied 'dec' will override that found in metadata." +msgstr "用户æä¾›çš„“decâ€å°†è¦†ç›–元数æ®ä¸­çš„å°æ•°ç‚¹åˆ†éš”符" + +msgid "User-supplied 'na.strings' will override that found in metadata." +msgstr "用户æä¾›çš„“na.stringsâ€å°†è¦†ç›–元数æ®ä¸­å¯¹é»˜è®¤å€¼çš„预处ç†" + +msgid "Column '" +msgstr "列" + +msgid "' was requested to be '" +msgstr "è¢«è¦æ±‚为" + +msgid "' but fread encountered the following" +msgstr "但是freadé‡åˆ°äº†ä»¥ä¸‹é—®é¢˜" + +msgid "error" +msgstr "错误" + +msgid "warning" +msgstr "警告" + +msgid ":" +msgstr ":" + +msgid "so the column has been left as type '" +msgstr "所以该列已ç»è¢«ä¿å­˜ä¸ºç±»åž‹" + +msgid "" +"key argument of data.table() must be a character vector naming columns (NB: " +"col.names are applied before this)" +msgstr "data.table()çš„å…³é”®å‚æ•°å¿…须是字符å‘é‡å‘½å的列(NB:col.names在这之å‰è¢«ä½¿ç”¨è¿‡ï¼‰" + +msgid "" +"index argument of data.table() must be a character vector naming columns " +"(NB: col.names are applied before this)" +msgstr "data.table()çš„å…³é”®å‚æ•°å¿…须是字符å‘é‡å‘½å的列(NB:col.names在这之å‰è¢«ä½¿ç”¨è¿‡ï¼‰" + +msgid "dateTimeAs must be a single string" +msgstr "dataTimeAs 必须是å•个字符串" + +msgid "dateTimeAs must be 'ISO','squash','epoch' or 'write.csv'" +msgstr "dateTimeAs 必须是 'ISO','squash','epoch' 或 'write.csv'" + +msgid "logicalAsInt has been renamed logical01. Use logical01 only, not both." +msgstr "logicalAsInt å·²é‡å‘½å为 logical01。ä¸è¦åŒæ—¶ä½¿ç”¨å®ƒä»¬ï¼Œä»…使用 logical01。" + +msgid "x being coerced from class: matrix to data.table" +msgstr "x 的类将强制从 matrix 转å˜ä¸º data.table" + +msgid "Input has no columns; doing nothing." +msgstr "è¾“å…¥æ²¡æœ‰åˆ—ï¼Œä¸æ‰§è¡Œä»»ä½•æ“作。" + +msgid "If you intended to overwrite the file at" +msgstr "如果你打算覆盖文件" + +msgid "with an empty one, please use file.remove first." +msgstr "为空文件,请先使用 file.remove。" + +msgid "Input has no columns; creating an empty file at '" +msgstr "输入没有列,将创建一个空文件 '" + +msgid "' and exiting." +msgstr "' 并退出。" + +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') 安装 'yaml' 包åŽå†è¯•。" + +msgid "Argument 'x' must be a data.table object" +msgstr "'x' 傿•°å¿…须是一个 data.table 对象" + +msgid "" +"Argument 'by' must be a character vector of column names used in grouping." +msgstr "'by' 傿•°å¿…须是一个字符å‘é‡ï¼Œå‘é‡çš„元素是列å,用于分组。" + +msgid "Argument 'id' must be a logical scalar." +msgstr "'id' 傿•°å¿…须是一个逻辑标é‡ã€‚" + +msgid "" +"Argument 'x' is a 0-column data.table; no measure to apply grouping over." +msgstr "'x' 傿•°æ˜¯ä¸€ä¸ª 0 列的 data.table;无法对其应用分组。" + +msgid "Input data.table must not contain duplicate column names." +msgstr "作为输入的 data.table 对象ä¸èƒ½å«æœ‰é‡å¤çš„列å。" + +msgid "Argument 'by' must have unique column names for grouping." +msgstr "'by' 傿•°ç”¨äºŽåˆ†ç»„,ä¸å¯åŒ…å«é‡å¤åˆ—å。" + +msgid "Argument 'sets' must be a list of character vectors." +msgstr "'sets' 傿•°å¿…须是一个字符å‘é‡çš„列表。" + +msgid "" +"All columns used in 'sets' argument must be in 'by' too. Columns used in " +"'sets' but not present in 'by':" +msgstr "在 'sets' 傿•°ä¸­åº”用的所有列也必须在 'by' 中。" +"å½“å‰ 'sets' 包å«è€Œ 'by' 中ä¸å«çš„列有:" + +msgid "" +"When using `id=TRUE` the 'x' data.table must not have a column named " +"'grouping'." +msgstr "当使用 `id=TRUE` 时," +"data.table 'x' ä¸èƒ½åŒ…å«å为 'grouping' 的列。" + +msgid "" +"Character vectors in 'sets' list must not have duplicated column names " +"within a single grouping set." +msgstr "在å•个分组中,'sets' 列表中的字符串å‘é‡ä¸èƒ½æœ‰é‡å¤çš„列å。" + +msgid "" +"'sets' contains a duplicate (i.e., equivalent up to sorting) element at index" +msgstr "'sets' çš„ç´¢å¼•å«æœ‰é‡å¤çš„å…ƒç´ ï¼Œåœ¨åšæŽ’åºæ—¶çš„作用是对等的" + +msgid "" +"; 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 "ï¼›åŒæ ·çš„,输出中也会包å«é‡å¤çš„è¡Œï¼ˆæ³¨æ„æŒ‰ç…§Aã€B分组与按照Bã€A分组的结果是一样的。)" +"使用 `sets=unique(lapply(sets, sort))` æ¥æ¶ˆé™¤é‡å¤ã€‚" + + +msgid "" +"Expression passed to grouping sets function must not update by reference. " +"Use ':=' on results of your grouping function." +msgstr "传递给分组相关函数的表达å¼ä¸èƒ½é€šè¿‡å¼•用更新。" +"请在你的分组函数返回的结果中使用 ':=' 。" + +msgid "" +"When using `id=TRUE` the 'j' expression must not evaluate to a column named " +"'grouping'." +msgstr "当 `id=TRUE` 时,'j' 表达å¼ä¸èƒ½é’ˆå¯¹ 'grouping' 列求值。" + +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` 传递的列中没有å‘生é‡å ã€‚" + +msgid "" +"Using integer64 class columns require to have 'bit64' package installed." +msgstr "è¦åœ¨åˆ—中使用 integer64 类,需è¦å…ˆå®‰è£… 'bit64' 包。" + +msgid "" +"internal error, package:xts is on search path but could not be loaded via " +"requireNamespace" +msgstr "内部错误,在æœç´¢æ—¶æ‰¾åˆ°äº† xts 包,但无法使用 requireNamespace 加载" + +msgid "Argument 'sort' should be logical TRUE/FALSE" +msgstr "傿•° 'sort' 应为逻辑值 TRUE 或 FALSE" + +msgid "Argument 'no.dups' should be logical TRUE/FALSE" +msgstr "" + +msgid "You are trying to join data.tables where" +msgstr "" + +msgid "'x' and 'y' arguments are" +msgstr "" + +msgid "'x' argument is" +msgstr "" + +msgid "'y' argument is" +msgstr "" + +msgid "0 columns data.table." +msgstr "" + +msgid "`by.x` and `by.y` must be of same length." +msgstr "" + +msgid "Supplied both `by` and `by.x/by.y`. `by` argument will be ignored." +msgstr "" + +msgid "A non-empty vector of column names are required for `by.x` and `by.y`." +msgstr "" + +msgid "Elements listed in `by.x` must be valid column names in x." +msgstr "" + +msgid "Elements listed in `by.y` must be valid column names in y." +msgstr "" + +msgid "A non-empty vector of column names for `by` is required." +msgstr "" + +msgid "Elements listed in `by` must be valid column names in x and y" +msgstr "" + +msgid "column names" +msgstr "" + +msgid "are duplicated in the result" +msgstr "" + +msgid "IN DEVELOPMENT built" +msgstr "" + +msgid "using" +msgstr "" + +msgid "threads (see ?getDTthreads). Latest news: r-datatable.com" +msgstr "" + +msgid "TRANSLATION CHECK" +msgstr "中文" + +msgid "**********" +msgstr "" + +msgid "" +"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" +msgstr "" + +msgid "" +"**********\n" +"This development version of data.table was built more than 4 weeks ago. " +"Please update: data.table::update.dev.pkg()\n" +"**********" +msgstr "" + +msgid "" +"**********\n" +"This installation of data.table has not detected OpenMP support. It should " +"still work but in single-threaded mode." +msgstr "" + +msgid "" +"If this is a Mac, please ensure you are using R>=3.4.0 and have followed our " +"Mac instructions here: https://github.com/Rdatatable/data.table/wiki/" +"Installation." +msgstr "" + +msgid "" +"This warning message should not occur on Windows or Linux. If it does, " +"please file a GitHub issue.\n" +"**********" +msgstr "" + +msgid "There is no" +msgstr "" + +msgid "package in provided repository." +msgstr "" + +msgid "" +"The option 'datatable.nomatch' is being used and is not set to the default " +"NA. This option is still honored for now but will be deprecated in future. " +"Please see NEWS for 1.12.4 for detailed information and motivation. To " +"specify inner join, please specify `nomatch=NULL` explicitly in your calls " +"rather than changing the default using this option." +msgstr "" + +msgid "The datatable." +msgstr "" + +msgid "version (" +msgstr "" + +msgid ") does not match the package (" +msgstr "" + +msgid "). Please close all R sessions to release the old" +msgstr "" + +msgid "" +"and reinstall data.table in a fresh R session. The root cause is that R's " +"package installer can in some unconfirmed circumstances leave a package in a " +"state that is apparently functional but where new R code is 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. Please help by adding precise " +"circumstances to 17478 to move the status to confirmed. 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 "" + +msgid "This is R" +msgstr "" + +msgid "but data.table has been installed using R" +msgstr "" + +msgid ". The major version must match. Please reinstall data.table." +msgstr "" + +msgid "" +"Option 'datatable.old.bywithoutby' has been removed as warned for 2 years. " +"It is now ignored. Please use by=.EACHI instead and stop using this option." +msgstr "" + +msgid "Unexpected base R behaviour: list(x) has copied x" +msgstr "" + +msgid "Unexpected base R behaviour: names<- has copied column contents" +msgstr "" + +msgid "" +"Unexpected base R behaviour: DF[2,2]<- did not copy column 2 which was " +"assigned to" +msgstr "" + +msgid "" +"Unexpected base R behaviour: DF[2,2]<- copied the first column which was not " +"assigned to, too" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- has not copied address(DF)" +msgstr "" + +msgid "" +"Reminder to data.table developers: don't use getRversion() internally. Add a " +"behaviour test to .onLoad instead." +msgstr "" + +msgid "Provide either threads= or percent= but not both" +msgstr "" + +msgid "percent= is provided but is length" +msgstr "" + +msgid "percent==" +msgstr "" + +msgid "but should be a number between 2 and 100" +msgstr "" + +msgid "Valid options for col.names are 'auto', 'top', and 'none'" +msgstr "" + +msgid "Column classes will be suppressed when col.names is 'none'" +msgstr "" + +msgid "" +"Internal structure doesn't seem to be a list. Possibly corrupt data.table." +msgstr "" + +msgid "" +"x may no longer be the character name of the data.table. The possibility was " +"undocumented and has been removed." +msgstr "" + +msgid "set2key() is now deprecated. Please use setindex() instead." +msgstr "" + +msgid "set2keyv() is now deprecated. Please use setindexv() instead." +msgstr "" + +msgid "key2() is now deprecated. Please use indices() instead." +msgstr "" + +msgid "" +"key(x)<-value is deprecated and not supported. Please change to use setkey() " +"with perhaps copy(). Has been warning since 2012 and will be an error in " +"future." +msgstr "" + +msgid "x is not a data.table" +msgstr "" + +msgid "" +"cols is not a character vector. Please see further information in ?setkey." +msgstr "" + +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 "" + +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 "" + +msgid "cols is the empty string. Use NULL to remove the key." +msgstr "" + +msgid "cols contains some blanks." +msgstr "" + +msgid "some columns are not in the data.table:" +msgstr "" + +msgid "" +"x contains a column called '.xi'. Conflicts with internal use by data.table." +msgstr "" + +msgid "' is type '" +msgstr "" + +msgid "' which is not supported as a key column type, currently." +msgstr "" + +msgid "" +"Internal error. 'cols' should be character at this point in setkey; please " +"report." +msgstr "" + +msgid "Internal error: index '" +msgstr "" + +msgid "' exists but is invalid" +msgstr "" + +msgid "" +"Use 'if (length(o <- forderv(DT,by))) ...' for efficiency in one step, so " +"you have o as well if not sorted." +msgstr "" + +msgid "x is vector but 'by' is supplied" +msgstr "" + +msgid "x is a single vector, non-NULL 'by' doesn't make sense" +msgstr "" + +msgid "Attempting to order a 0-column data.table or data.frame." +msgstr "" + +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 "" + +msgid "Internal code should not be being called on type double" +msgstr "" + +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 "" + +msgid "" +"New parallel sort has not been implemented for decreasing=TRUE so far. Using " +"one thread." +msgstr "" + +msgid "" +"New parallel sort has not been implemented for vectors containing NA values " +"so far. Using one thread." +msgstr "" + +msgid "x must be a data.frame or data.table." +msgstr "" + +msgid "x must be a data.frame or data.table" +msgstr "" + +msgid "na.last must be logical TRUE/FALSE" +msgstr "" + +msgid "" +"cols is not a character vector. Please see further information in ?setorder." +msgstr "" + +msgid "" +"cols is a character vector of zero length. Use NULL instead, or wrap with " +"suppressWarnings() to avoid this warning." +msgstr "" + +msgid "' which is not supported for ordering currently." +msgstr "" + +msgid "'sorted' is TRUE but element" +msgstr "" + +msgid "is non-atomic, which can't be sorted; try setting sorted = FALSE" +msgstr "" + +msgid "Cross product of elements provided to CJ() would result in" +msgstr "" + +msgid "rows which exceeds .Machine$integer.max ==" +msgstr "" + +msgid "x and y must both be data.tables" +msgstr "" + +msgid "length(by.x) != length(by.y)" +msgstr "" + +msgid "When x's column ('" +msgstr "" + +msgid "') is character, the corresponding column in y ('" +msgstr "" + +msgid "') should be factor or character, but found incompatible type '" +msgstr "" + +msgid "') is factor, the corresponding column in y ('" +msgstr "" + +msgid "') should be character or factor, but found incompatible type '" +msgstr "" + +msgid "') is integer or numeric, the corresponding column in y ('" +msgstr "" + +msgid "') can not be character or logical types, but found incompatible type '" +msgstr "" + +msgid "argument 'all' should be logical of length one" +msgstr "" + +msgid "x and y must have the same column names" +msgstr "" + +msgid "x and y must have the same column order" +msgstr "" + +msgid "unsupported column type" +msgstr "" + +msgid "found in x or y:" +msgstr "" + +msgid "of x is '" +msgstr "" + +msgid "' but the corresponding item of y is '" +msgstr "" + +msgid "None of the datasets should contain a column named '.seqn'" +msgstr "" + +msgid "'target' and 'current' must both be data.tables" +msgstr "" + +msgid "Internal error: ncol(current)==ncol(target) was checked above" +msgstr "" + +msgid "None of the datasets to compare should contain a column named '.seqn'" +msgstr "" + +msgid "" +"Datasets to compare with 'ignore.row.order' must not have unsupported column " +"types:" +msgstr "" + +msgid "" +"Argument 'tolerance' was forced to lowest accepted value `sqrt(.Machine" +"$double.eps)` from provided" +msgstr "" + +msgid "" +"Duplicate rows in datasets, numeric columns and ignore.row.order cannot be " +"used with non 0 tolerance argument" +msgstr "" + +msgid "" +"Factor columns and ignore.row.order cannot be used with non 0 tolerance " +"argument" +msgstr "" + +msgid "Internal error: factor type mismatch should have been caught earlier" +msgstr "" + +msgid "argument 'fill' ignored, only make sense for type='const'" +msgstr "" + +msgid "order.col='" +msgstr "" + +msgid "' not a column name of info" +msgstr "" + +msgid "data.table package is loaded. Unload or start a fresh R session." +msgstr "" + +msgid "" +"script must end with '.Rraw'. If a file ending '.Rraw.bz2' exists, that will " +"be found and used." +msgstr "" + +msgid "Neither" +msgstr "" + +msgid "exist in" +msgstr "" + +msgid "Timings count mismatch:" +msgstr "" + +msgid "vs" +msgstr "" + +msgid "out of" +msgstr "" + +msgid "in" +msgstr "" + +msgid "on" +msgstr "" + +msgid ". [" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "for test number" +msgstr "" + +msgid "Test" +msgstr "" + +msgid "" +"is invalid: when error= is provided it does not make sense to pass y as well" +msgstr "" + +msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" +msgstr "" + +msgid "make.names='" +msgstr "" + +msgid "' not found in names of input" +msgstr "" + +msgid "make.names=" +msgstr "" + +msgid "is out of range [1,ncol=" +msgstr "" + +msgid "'names' must be TRUE/FALSE or a character vector." +msgstr "" + +msgid "'keep' should contain integer values between" +msgstr "" + +msgid "length(names) (=" +msgstr "" + +msgid ") is not equal to length(" +msgstr "" + +msgid ") (=" +msgstr "" + +msgid ")." +msgstr "" + +msgid "l not type list" +msgstr "" + +msgid "x not boolean" +msgstr "" + +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 "" + +msgid "Pattern" +msgstr "" + +msgid "not found: [" +msgstr "" + +msgid "" +"Input xts object should not have 'index' column because it would result in " +"duplicate column names. Rename 'index' column in xts or use `keep." +"rownames=FALSE` and add index manually as another column." +msgstr "" + +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 "" + +msgid "Following columns are not numeric and will be omitted:" +msgstr "" diff --git a/po/data.table.pot b/po/data.table.pot new file mode 100644 index 0000000000..0340734659 --- /dev/null +++ b/po/data.table.pot @@ -0,0 +1,4362 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the data.table package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.7\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-21 16:15+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: assign.c:9 +msgid "Internal error: finalizer hasn't received an ExternalPtr" +msgstr "" + +#: assign.c:11 +msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +msgstr "" + +#: assign.c:14 +#, c-format +msgid "Internal error: finalizer sees l=%d, tl=%d" +msgstr "" + +#: assign.c:123 +msgid "" +".internal.selfref ptr is NULL. 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 data.table issue " +"tracker.\n" +msgstr "" + +#: assign.c:126 +msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" +msgstr "" + +#: assign.c:128 +msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" +msgstr "" + +#: assign.c:170 +msgid "Internal error: length(names)>0 but =0 and not NA." +msgstr "" + +#: assign.c:241 fsort.c:109 nafill.c:73 +msgid "verbose must be TRUE or FALSE" +msgstr "" + +#: assign.c:289 +msgid "assign has been passed a NULL dt" +msgstr "" + +#: assign.c:290 +msgid "dt passed to assign isn't type VECSXP" +msgstr "" + +#: assign.c:292 +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 "" + +#: assign.c:300 +msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" +msgstr "" + +#: assign.c:304 +msgid "dt passed to assign has no names" +msgstr "" + +#: assign.c:306 +#, c-format +msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" +msgstr "" + +#: assign.c:308 +msgid "" +"data.table is NULL; malformed. A null data.table should be an empty list. " +"typeof() should always return 'list' for data.table." +msgstr "" + +#: assign.c:317 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "" + +#: assign.c:322 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:325 +#, 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 "" + +#: assign.c:331 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]." +msgstr "" + +#: assign.c:334 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "" + +#: assign.c:342 +#, c-format +msgid "Added %d new column%s initialized with all-NA\n" +msgstr "" + +#: assign.c:347 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "" + +#: assign.c:361 +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 "" + +#: assign.c:372 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:375 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" + +#: assign.c:377 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "" + +#: assign.c:378 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "" + +#: assign.c:380 +#, c-format +msgid "RHS_list_of_columns == %s\n" +msgstr "" + +#: assign.c:385 +#, 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 "" + +#: assign.c:390 +#, 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 "" + +#: assign.c:395 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" +msgstr "" + +#: assign.c:397 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "" + +#: assign.c:405 +#, 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 "" + +#: assign.c:406 +#, 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 "" + +#: assign.c:411 +msgid "When deleting columns, i should not be provided" +msgstr "" + +#: assign.c:417 +#, 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 "" + +#: assign.c:422 +#, c-format +msgid "" +"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" +msgstr "" + +#: assign.c:424 +#, c-format +msgid "Column '%s' does not exist to remove" +msgstr "" + +#: assign.c:430 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "" + +#: assign.c:434 +#, c-format +msgid "" +"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " +"character, factor, integer or numeric)" +msgstr "" + +#: assign.c:439 +#, 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 "" + +#: assign.c:449 +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 "" + +#: assign.c:450 +#, c-format +msgid "" +"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +"issue tracker, including result of sessionInfo()." +msgstr "" + +#: assign.c:452 +#, 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 "" + +#: assign.c:454 +#, c-format +msgid "" +"Internal error: DT passed to assign has not been allocated enough column " +"slots. l=%d, tl=%d, adding %d" +msgstr "" + +#: assign.c:456 +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 "" + +#: assign.c:460 +#, c-format +msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" +msgstr "" + +#: assign.c:471 +msgid "" +"Internal error: earlier error 'When deleting columns, i should not be " +"provided' did not happen." +msgstr "" + +#: assign.c:482 +#, c-format +msgid "" +"RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but " +"then is being plonked. length(values)==%d; length(cols)==%d)\n" +msgstr "" + +#: assign.c:487 +#, c-format +msgid "Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n" +msgstr "" + +#: assign.c:556 +#, 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 "" + +#: assign.c:564 +msgid "Internal error: index name ends with trailing __" +msgstr "" + +#: assign.c:569 +msgid "Internal error: Couldn't allocate memory for s4." +msgstr "" + +#: assign.c:580 +msgid "Internal error: Couldn't allocate memory for s5." +msgstr "" + +#: assign.c:601 assign.c:617 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:610 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:687 +#, c-format +msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" +msgstr "" + +#: assign.c:691 +msgid "Internal error: memrecycle has received NULL colname" +msgstr "" + +#: assign.c:717 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" + +#: assign.c:731 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "" + +#: assign.c:739 +#, 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 "" + +#: assign.c:745 +#, c-format +msgid "" +"Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " +"character, NA in any type, or level numbers." +msgstr "" + +#: assign.c:766 +msgid "" +"Internal error: levels of target are either not unique or have truelength<0" +msgstr "" + +#: assign.c:805 +#, c-format +msgid "Unable to allocate working memory of %d bytes to combine factor levels" +msgstr "" + +#: assign.c:812 +msgid "Internal error: extra level check sum failed" +msgstr "" + +#: assign.c:831 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of the target column " +"(column %d named '%s')." +msgstr "" + +#: assign.c:837 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " +"column (column %d named '%s')." +msgstr "" + +#: assign.c:842 +#, c-format +msgid "" +"Coercing 'list' RHS to '%s' to match the type of the target column (column " +"%d named '%s')." +msgstr "" + +#: assign.c:848 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" +msgstr "" + +#: assign.c:943 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "" + +#: assign.c:1063 +msgid "" +"To assign integer64 to a character column, please use as.character() for " +"clarity." +msgstr "" + +#: assign.c:1074 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "" + +#: assign.c:1121 +#, c-format +msgid "Internal error: writeNA passed a vector of type '%s'" +msgstr "" + +#: assign.c:1152 +#, c-format +msgid "" +"Internal error: savetl_init checks failed (%d %d %p %p). please report to " +"data.table issue tracker." +msgstr "" + +#: assign.c:1160 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "" + +#: assign.c:1169 +#, c-format +msgid "" +"Internal error: reached maximum %d items for savetl. Please report to data." +"table issue tracker." +msgstr "" + +#: assign.c:1176 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "" + +#: assign.c:1182 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "" + +#: assign.c:1205 +msgid "x must be a character vector" +msgstr "" + +#: assign.c:1206 +msgid "'which' must be an integer vector" +msgstr "" + +#: assign.c:1207 +msgid "'new' must be a character vector" +msgstr "" + +#: assign.c:1208 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "" + +#: assign.c:1211 +#, c-format +msgid "" +"Item %d of 'which' is %d which is outside range of the length %d character " +"vector" +msgstr "" + +#: assign.c:1221 +msgid "dt passed to setcolorder has no names" +msgstr "" + +#: assign.c:1223 +#, c-format +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "" + +#: assign.c:1230 +msgid "" +"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" +msgstr "" + +#: assign.c:1232 +msgid "Internal error: o passed to Csetcolorder contains a duplicate" +msgstr "" + +#: between.c:12 +#, 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 "" + +#: between.c:16 +msgid "incbounds must be TRUE or FALSE" +msgstr "" + +#: between.c:19 +msgid "NAbounds must be TRUE or NA" +msgstr "" + +#: between.c:22 +msgid "check must be TRUE or FALSE" +msgstr "" + +#: between.c:64 +#, c-format +msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" +msgstr "" + +#: between.c:82 +#, c-format +msgid "between parallel processing of integer took %8.3fs\n" +msgstr "" + +#: between.c:88 +msgid "x is integer64 but lower and/or upper are not." +msgstr "" + +#: between.c:95 +#, c-format +msgid "Item %d of lower (%lld) is greater than item %d of upper (%lld)" +msgstr "" + +#: between.c:112 +#, c-format +msgid "between parallel processing of integer64 took %8.3fs\n" +msgstr "" + +#: between.c:115 +msgid "" +"x is not integer64 but lower and/or upper is integer64. Please align classes." +msgstr "" + +#: between.c:122 +#, c-format +msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" +msgstr "" + +#: between.c:140 +#, c-format +msgid "between parallel processing of double with open bounds took %8.3fs\n" +msgstr "" + +#: between.c:157 +#, c-format +msgid "between parallel processing of double with closed bounds took %8.3fs\n" +msgstr "" + +#: between.c:172 +#, c-format +msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" +msgstr "" + +#: between.c:187 +#, c-format +msgid "between non-parallel processing of character took %8.3fs\n" +msgstr "" + +#: between.c:190 +#, c-format +msgid "" +"Internal error: between.c unsupported type '%s' should have been caught at R " +"level" +msgstr "" + +#: bmerge.c:48 +msgid "Internal error: icols is not integer vector" +msgstr "" + +#: bmerge.c:49 +msgid "Internal error: xcols is not integer vector" +msgstr "" + +#: bmerge.c:50 +#, c-format +msgid "Internal error: length(icols) [%d] > length(xcols) [%d]" +msgstr "" + +#: bmerge.c:57 +#, c-format +msgid "Internal error. icols[%d] is NA" +msgstr "" + +#: bmerge.c:58 +#, c-format +msgid "Internal error. xcols[%d] is NA" +msgstr "" + +#: bmerge.c:59 +#, c-format +msgid "icols[%d]=%d outside range [1,length(i)=%d]" +msgstr "" + +#: bmerge.c:60 +#, c-format +msgid "xcols[%d]=%d outside range [1,length(x)=%d]" +msgstr "" + +#: bmerge.c:63 +#, c-format +msgid "typeof x.%s (%s) != typeof i.%s (%s)" +msgstr "" + +#: bmerge.c:70 +msgid "roll is character but not 'nearest'" +msgstr "" + +#: bmerge.c:71 +msgid "roll='nearest' can't be applied to a character column, yet." +msgstr "" + +#: bmerge.c:74 +msgid "Internal error: roll is not character or double" +msgstr "" + +#: bmerge.c:79 +msgid "rollends must be a length 2 logical vector" +msgstr "" + +#: bmerge.c:89 uniqlist.c:270 +msgid "" +"Internal error: invalid value for 'mult'. please report to data.table issue " +"tracker" +msgstr "" + +#: bmerge.c:93 +msgid "" +"Internal error: opArg is not an integer vector of length equal to length(on)" +msgstr "" + +#: bmerge.c:96 +msgid "Internal error: nqgrpArg must be an integer vector" +msgstr "" + +#: bmerge.c:102 +msgid "Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector" +msgstr "" + +#: bmerge.c:111 +msgid "Internal error in allocating memory for non-equi join" +msgstr "" + +#: bmerge.c:156 +msgid "Internal error: xoArg is not an integer vector" +msgstr "" + +#: bmerge.c:271 bmerge.c:379 +#, c-format +msgid "" +"Internal error in bmerge_r for '%s' column. Unrecognized value op[col]=%d" +msgstr "" + +#: bmerge.c:303 +#, c-format +msgid "Only '==' operator is supported for columns of type %s." +msgstr "" + +#: bmerge.c:410 +#, c-format +msgid "Type '%s' not supported for joining/merging" +msgstr "" + +#: bmerge.c:468 +msgid "Internal error: xlow!=xupp-1 || xlowxuppIn" +msgstr "" + +#: chmatch.c:4 +#, c-format +msgid "x is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:5 +#, c-format +msgid "table is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:6 +msgid "Internal error: either chin or chmatchdup should be true not both" +msgstr "" + +#: chmatch.c:30 +#, c-format +msgid "" +"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " +"issue on the data.table tracker." +msgstr "" + +#: chmatch.c:60 +#, c-format +msgid "" +"Failed to allocate %lld bytes working memory in chmatchdup: length(table)=%d " +"length(unique(table))=%d" +msgstr "" + +#: cj.c:89 +#, c-format +msgid "Type '%s' not supported by CJ." +msgstr "" + +#: coalesce.c:5 +msgid "Internal error in coalesce.c: input is list(...) at R level" +msgstr "" + +#: coalesce.c:7 +msgid "" +"Internal error in coalesce.c: argument 'inplaceArg' must be TRUE or FALSE" +msgstr "" + +#: coalesce.c:16 +msgid "" +"The first argument is a list, data.table or data.frame. In this case there " +"should be no other arguments provided." +msgstr "" + +#: coalesce.c:32 +#, 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 "" + +#: coalesce.c:34 +#, c-format +msgid "" +"Item %d is a factor but its levels are not identical to the first item's " +"levels." +msgstr "" + +#: coalesce.c:38 +#, 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 "" + +#: coalesce.c:41 +#, c-format +msgid "" +"Item %d is type %s but the first item is type %s. Please coerce before " +"coalescing." +msgstr "" + +#: coalesce.c:43 +#, c-format +msgid "Item %d has a different class than item 1." +msgstr "" + +#: coalesce.c:46 +#, c-format +msgid "" +"Item %d is length %d but the first item is length %d. Only singletons are " +"recycled." +msgstr "" + +#: coalesce.c:50 +msgid "coalesce copied first item (inplace=FALSE)\n" +msgstr "" + +#: coalesce.c:166 +#, c-format +msgid "Unsupported type: %s" +msgstr "" + +#: dogroups.c:14 +msgid "Internal error: order not integer vector" +msgstr "" + +#: dogroups.c:15 +msgid "Internal error: starts not integer" +msgstr "" + +#: dogroups.c:16 +msgid "Internal error: lens not integer" +msgstr "" + +#: dogroups.c:18 +msgid "Internal error: jiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:19 +msgid "Internal error: xjiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:20 +msgid "'env' should be an environment" +msgstr "" + +#: dogroups.c:39 +#, c-format +msgid "" +"Internal error: unsupported size-0 type '%s' in column %d of 'by' should " +"have been caught earlier" +msgstr "" + +#: dogroups.c:43 +#, c-format +msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" +msgstr "" + +#: dogroups.c:62 +msgid "row.names attribute of .SD not found" +msgstr "" + +#: dogroups.c:64 +#, 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 "" + +#: dogroups.c:69 +msgid "length(names)!=length(SD)" +msgstr "" + +#: dogroups.c:73 +#, c-format +msgid "" +"Internal error: size-0 type %d in .SD column %d should have been caught " +"earlier" +msgstr "" + +#: dogroups.c:83 +msgid "length(xknames)!=length(xSD)" +msgstr "" + +#: dogroups.c:87 +#, c-format +msgid "" +"Internal error: type %d in .xSD column %d should have been caught by now" +msgstr "" + +#: dogroups.c:91 +#, c-format +msgid "length(iSD)[%d] != length(jiscols)[%d]" +msgstr "" + +#: dogroups.c:92 +#, c-format +msgid "length(xSD)[%d] != length(xjiscols)[%d]" +msgstr "" + +#: dogroups.c:155 dogroups.c:184 +msgid "Internal error. Type of column should have been checked by now" +msgstr "" + +#: dogroups.c:273 +#, c-format +msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." +msgstr "" + +#: dogroups.c:281 +msgid "" +"All items in j=list(...) should be atomic vectors or lists. 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 "" + +#: dogroups.c:291 +msgid "" +"RHS is NULL when grouping :=. Makes no sense to delete a column by group. " +"Perhaps use an empty vector instead." +msgstr "" + +#: dogroups.c:295 +#, 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 "" + +#: dogroups.c:304 +msgid "" +"Internal error: Trying to add new column by reference but tl is full; " +"setalloccol should have run first at R level before getting to this point in " +"dogroups" +msgstr "" + +#: dogroups.c:319 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "" + +#: dogroups.c:326 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "" + +#: dogroups.c:360 +#, 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 "" + +#: dogroups.c:363 +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 "" + +#: dogroups.c:365 +#, 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 "" + +#: dogroups.c:373 +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 "" + +#: dogroups.c:385 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "" + +#: dogroups.c:386 +#, c-format +msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +msgstr "" + +#: dogroups.c:419 +#, 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 "" + +#: dogroups.c:426 +#, 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 "" + +#: dogroups.c:428 +#, 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 "" + +#: dogroups.c:443 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "" + +#: dogroups.c:453 +#, c-format +msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" +msgstr "" + +#: dogroups.c:455 +#, c-format +msgid "" +"\n" +" %s took %.3fs for %d groups\n" +msgstr "" + +#: dogroups.c:457 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr "" + +#: dogroups.c:481 +msgid "growVector passed NULL" +msgstr "" + +#: fastmean.c:39 +msgid "narm should be TRUE or FALSE" +msgstr "" + +#: fastmean.c:45 +#, c-format +msgid "fastmean was passed type %s, not numeric or logical" +msgstr "" + +#: fastmean.c:83 fastmean.c:111 +#, c-format +msgid "Internal error: type '%s' not caught earlier in fastmean" +msgstr "" + +#: fcast.c:80 +#, c-format +msgid "Unsupported column type in fcast val: '%s'" +msgstr "" + +#: fifelse.c:5 +msgid "Argument 'test' must be logical." +msgstr "" + +#: fifelse.c:23 +#, c-format +msgid "" +"'yes' is of type %s but 'no' is of type %s. Please make sure that both " +"arguments have the same type." +msgstr "" + +#: fifelse.c:28 +msgid "" +"'yes' has different class than 'no'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:33 +msgid "'yes' and 'no' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:38 +#, c-format +msgid "Length of 'yes' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:40 +#, c-format +msgid "Length of 'no' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:51 +#, c-format +msgid "Length of 'na' is %lld but must be 1" +msgstr "" + +#: fifelse.c:57 +#, c-format +msgid "" +"'yes' is of type %s but 'na' is of type %s. Please make sure that both " +"arguments have the same type." +msgstr "" + +#: fifelse.c:59 +msgid "" +"'yes' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:63 +msgid "'yes' and 'na' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:133 +#, c-format +msgid "Type %s is not supported." +msgstr "" + +#: fmelt.c:18 +msgid "'x' must be an integer" +msgstr "" + +#: fmelt.c:19 +msgid "'n' must be a positive integer" +msgstr "" + +#: fmelt.c:41 +msgid "Argument to 'which' must be logical" +msgstr "" + +#: fmelt.c:70 +msgid "concat: 'vec must be a character vector" +msgstr "" + +#: fmelt.c:71 +msgid "concat: 'idx' must be an integer vector of length >= 0" +msgstr "" + +#: fmelt.c:75 +msgid "" +"concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= " +"length(vec)" +msgstr "" + +#: fmelt.c:102 +#, c-format +msgid "Unknown 'measure.vars' type %s at index %d of list" +msgstr "" + +#: fmelt.c:148 +#, 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 "" + +#: fmelt.c:154 fmelt.c:219 +#, c-format +msgid "Unknown 'id.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:159 fmelt.c:223 +msgid "One or more values in 'id.vars' is invalid." +msgstr "" + +#: fmelt.c:175 +msgid "" +"'measure.vars' is missing. Assigning all columns other than 'id.vars' " +"columns as 'measure.vars'.\n" +msgstr "" + +#: fmelt.c:176 +#, c-format +msgid "Assigned 'measure.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:184 +#, c-format +msgid "" +"Unknown 'measure.vars' type %s, must be character or integer vector/list" +msgstr "" + +#: fmelt.c:193 fmelt.c:239 +msgid "One or more values in 'measure.vars' is invalid." +msgstr "" + +#: fmelt.c:211 +msgid "" +"'id.vars' is missing. Assigning all columns other than 'measure.vars' " +"columns as 'id.vars'.\n" +msgstr "" + +#: fmelt.c:212 +#, c-format +msgid "Assigned 'id.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:231 +#, c-format +msgid "Unknown 'measure.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:276 +msgid "" +"When 'measure.vars' is a list, 'value.name' must be a character vector of " +"length =1 or =length(measure.vars)." +msgstr "" + +#: fmelt.c:277 +msgid "" +"When 'measure.vars' is either not specified or a character/integer vector, " +"'value.name' must be a character vector of length =1." +msgstr "" + +#: fmelt.c:280 +msgid "'variable.name' must be a character/integer vector of length=1." +msgstr "" + +#: fmelt.c:329 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects all-character input" +msgstr "" + +#: fmelt.c:332 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects a character target to " +"factorize" +msgstr "" + +#: fmelt.c:385 +#, 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 "" + +#: fmelt.c:387 +#, c-format +msgid "" +"The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n" +msgstr "" + +#: fmelt.c:490 +#, c-format +msgid "Unknown column type '%s' for column '%s'." +msgstr "" + +#: fmelt.c:514 +#, c-format +msgid "Internal error: fmelt.c:getvarcols %d %d" +msgstr "" + +#: fmelt.c:662 +#, c-format +msgid "Unknown column type '%s' for column '%s' in 'data'" +msgstr "" + +#: fmelt.c:673 +msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" +msgstr "" + +#: fmelt.c:674 +msgid "Argument 'value.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:675 +msgid "Argument 'variable.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:676 +msgid "Argument 'na.rm' should be logical TRUE/FALSE." +msgstr "" + +#: fmelt.c:677 +msgid "Argument 'variable.name' must be a character vector" +msgstr "" + +#: fmelt.c:678 +msgid "Argument 'value.name' must be a character vector" +msgstr "" + +#: fmelt.c:679 +msgid "Argument 'verbose' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:682 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "" + +#: fmelt.c:687 +msgid "names(data) is NULL. Please report to data.table-help" +msgstr "" + +#: forder.c:106 +#, c-format +msgid "Failed to realloc thread private group size buffer to %d*4bytes" +msgstr "" + +#: forder.c:120 +#, c-format +msgid "Failed to realloc group size result to %d*4bytes" +msgstr "" + +#: forder.c:263 +#, c-format +msgid "" +"Logical error. counts[0]=%d in cradix but should have been decremented to 0. " +"radix=%d" +msgstr "" + +#: forder.c:278 +msgid "Failed to alloc cradix_counts" +msgstr "" + +#: forder.c:280 +msgid "Failed to alloc cradix_tmp" +msgstr "" + +#: forder.c:291 +#, c-format +msgid "" +"Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " +"ustr_alloc=%d" +msgstr "" + +#: forder.c:292 +msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" +msgstr "" + +#: forder.c:312 +#, c-format +msgid "Unable to realloc %d * %d bytes in range_str" +msgstr "" + +#: forder.c:330 +msgid "Failed to alloc ustr3 when converting strings to UTF8" +msgstr "" + +#: forder.c:348 +msgid "Failed to alloc tl when converting strings to UTF8" +msgstr "" + +#: forder.c:377 +msgid "Must an integer or numeric vector length 1" +msgstr "" + +#: forder.c:378 +msgid "Must be 2, 1 or 0" +msgstr "" + +#: forder.c:412 +msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" +msgstr "" + +#: forder.c:434 +msgid "" +"Internal error: input is not either a list of columns, or an atomic vector." +msgstr "" + +#: forder.c:436 +msgid "" +"Internal error: input is an atomic vector (not a list of columns) but by= is " +"not NULL" +msgstr "" + +#: forder.c:438 +msgid "" +"Input is an atomic vector (not a list of columns) but order= is not a length " +"1 integer" +msgstr "" + +#: forder.c:440 +#, c-format +msgid "forder.c received a vector type '%s' length %d\n" +msgstr "" + +#: forder.c:448 +#, c-format +msgid "forder.c received %d rows and %d columns\n" +msgstr "" + +#: forder.c:451 +msgid "Internal error: DT is an empty list() of 0 columns" +msgstr "" + +#: forder.c:453 +#, c-format +msgid "" +"Internal error: DT has %d columns but 'by' is either not integer or is " +"length 0" +msgstr "" + +#: forder.c:455 +#, c-format +msgid "" +"Either order= is not integer or its length (%d) is different to by='s length " +"(%d)" +msgstr "" + +#: forder.c:461 +#, c-format +msgid "internal error: 'by' value %d out of range [1,%d]" +msgstr "" + +#: forder.c:463 +#, c-format +msgid "Column %d is length %d which differs from length of column 1 (%d)\n" +msgstr "" + +#: forder.c:467 +msgid "retGrp must be TRUE or FALSE" +msgstr "" + +#: forder.c:470 +msgid "sort must be TRUE or FALSE" +msgstr "" + +#: forder.c:473 +msgid "At least one of retGrp= or sort= must be TRUE" +msgstr "" + +#: forder.c:475 +msgid "na.last must be logical TRUE, FALSE or NA of length 1" +msgstr "" + +#: forder.c:519 +#, c-format +msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." +msgstr "" + +#: forder.c:545 +#, 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 "" + +#: forder.c:561 +#, c-format +msgid "Column %d passed to [f]order is type '%s', not yet supported." +msgstr "" + +#: forder.c:714 +msgid "Internal error: column not supported not caught earlier" +msgstr "" + +#: forder.c:722 +#, c-format +msgid "nradix=%d\n" +msgstr "" + +#: forder.c:728 +#, c-format +msgid "" +"Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" +msgstr "" + +#: forder.c:733 +msgid "Could not allocate (very tiny) group size thread buffers" +msgstr "" + +#: forder.c:794 +#, c-format +msgid "Timing block %2d%s = %8.3f %8d\n" +msgstr "" + +#: forder.c:797 +#, c-format +msgid "stat[%03d]==%10zd\n" +msgstr "" + +#: forder.c:1053 +#, c-format +msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" +msgstr "" + +#: forder.c:1162 +#, c-format +msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" +msgstr "" + +#: forder.c:1270 +msgid "" +"is.sorted (R level) and fsorted (C level) only to be used on vectors. If " +"needed on a list/data.table, you'll need the order anyway if not sorted, so " +"use if (length(o<-forder(...))) for efficiency in one step, or equivalent at " +"C level" +msgstr "" + +#: forder.c:1302 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "" + +#: forder.c:1311 +msgid "x must be either NULL or an integer vector" +msgstr "" + +#: forder.c:1313 +msgid "nrow must be integer vector length 1" +msgstr "" + +#: forder.c:1315 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "" + +#: forder.c:1332 +msgid "x must be type 'double'" +msgstr "" + +#: frank.c:11 +#, c-format +msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" +msgstr "" + +#: frank.c:12 +#, c-format +msgid "Internal error. Argument 'cols' to Cdt_na is type '%s' not 'integer'" +msgstr "" + +#: frank.c:16 frank.c:146 subset.c:263 +#, c-format +msgid "Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]" +msgstr "" + +#: frank.c:26 frank.c:155 +#, c-format +msgid "" +"Column %d of input list x is length %d, inconsistent with first column of " +"that item which is length %d." +msgstr "" + +#: frank.c:65 frank.c:202 transpose.c:88 +#, c-format +msgid "Unsupported column type '%s'" +msgstr "" + +#: frank.c:83 +msgid "" +"Internal error: invalid ties.method for frankv(), should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: frank.c:130 +#, c-format +msgid "Internal error: unknown ties value in frank: %d" +msgstr "" + +#: frank.c:141 +#, c-format +msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" +msgstr "" + +#: frank.c:142 +#, c-format +msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" +msgstr "" + +#: fread.c:149 +#, c-format +msgid "System error %d unmapping view of file\n" +msgstr "" + +#: fread.c:152 +#, c-format +msgid "System errno %d unmapping file: %s\n" +msgstr "" + +#: fread.c:212 +#, c-format +msgid "Internal error: NUMTYPE(%d) > nLetters(%d)" +msgstr "" + +#: fread.c:437 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM. %s allocation." +msgstr "" + +#: fread.c:442 +#, c-format +msgid "Avoidable %.3f seconds. %s time to copy.\n" +msgstr "" + +#: fread.c:443 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr "" + +#: fread.c:1095 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "" + +#: fread.c:1098 +msgid "[01] Check arguments\n" +msgstr "" + +#: fread.c:1105 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr "" + +#: fread.c:1113 +msgid "" +"Internal error: NAstrings is itself NULL. When empty it should be pointer to " +"NULL." +msgstr "" + +#: fread.c:1131 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "" + +#: fread.c:1136 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "" + +#: fread.c:1146 +msgid " No NAstrings provided.\n" +msgstr "" + +#: fread.c:1148 +msgid " NAstrings = [" +msgstr "" + +#: fread.c:1151 +msgid "]\n" +msgstr "" + +#: fread.c:1153 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr "" + +#: fread.c:1155 +msgid " None of the NAstrings look like numbers.\n" +msgstr "" + +#: fread.c:1157 +#, c-format +msgid " skip num lines = %llu\n" +msgstr "" + +#: fread.c:1158 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr "" + +#: fread.c:1159 +#, c-format +msgid " show progress = %d\n" +msgstr "" + +#: fread.c:1160 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr "" + +#: fread.c:1168 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "" + +#: fread.c:1169 +msgid "dec='' not allowed. Should be '.' or ','" +msgstr "" + +#: fread.c:1170 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1171 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1188 +msgid "[02] Opening the file\n" +msgstr "" + +#: fread.c:1191 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "" + +#: fread.c:1195 +msgid "Internal error: last byte of character input isn't \\0" +msgstr "" + +#: fread.c:1198 +#, c-format +msgid " Opening file %s\n" +msgstr "" + +#: fread.c:1202 +#, c-format +msgid "file not found: %s" +msgstr "" + +#: fread.c:1206 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "" + +#: fread.c:1209 fread.c:1237 +#, c-format +msgid "File is empty: %s" +msgstr "" + +#: fread.c:1210 fread.c:1238 +#, c-format +msgid " File opened, size = %s.\n" +msgstr "" + +#: fread.c:1227 +#, c-format +msgid "File not found: %s" +msgstr "" + +#: fread.c:1233 +#, c-format +msgid "Unable to open file after %d attempts (error %d): %s" +msgstr "" + +#: fread.c:1235 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "" + +#: fread.c:1240 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %d for file %s" +msgstr "" + +#: fread.c:1247 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "" + +#: fread.c:1248 +msgid "Please upgrade to 64bit" +msgstr "" + +#: fread.c:1248 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "" + +#: fread.c:1251 +msgid " Memory mapped ok\n" +msgstr "" + +#: fread.c:1253 +msgid "" +"Internal error: Neither `input` nor `filename` are given, nothing to read." +msgstr "" + +#: fread.c:1270 +msgid "[03] Detect and skip BOM\n" +msgstr "" + +#: fread.c:1274 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "" + +#: fread.c:1279 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "" + +#: fread.c:1282 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "" + +#: fread.c:1287 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr "" + +#: fread.c:1290 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "" + +#: fread.c:1297 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "" + +#: fread.c:1304 +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 "" + +#: fread.c:1305 +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 "" + +#: fread.c:1329 +#, 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 "" + +#: fread.c:1336 +#, c-format +msgid " File ends abruptly with '%c'. Copying file in RAM. %s copy.\n" +msgstr "" + +#: fread.c:1370 +msgid "[05] Skipping initial rows if needed\n" +msgstr "" + +#: fread.c:1376 +#, c-format +msgid "" +"skip='%s' not found in input (it is case sensitive and literal; i.e., no " +"patterns, wildcards or regex)" +msgstr "" + +#: fread.c:1382 +#, c-format +msgid "" +"Found skip='%s' on line %llu. Taking this to be header row or first row of " +"data.\n" +msgstr "" + +#: fread.c:1395 +#, c-format +msgid " Skipped to line %llu in the file" +msgstr "" + +#: fread.c:1396 +#, c-format +msgid "skip=%llu but the input only has %llu line%s" +msgstr "" + +#: fread.c:1405 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "" + +#: fread.c:1407 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr "" + +#: fread.c:1408 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr "" + +#: fread.c:1426 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "" + +#: fread.c:1430 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr "" + +#: fread.c:1449 +msgid " Detecting sep automatically ...\n" +msgstr "" + +#: fread.c:1456 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr "" + +#: fread.c:1490 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1540 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1547 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr "" + +#: fread.c:1563 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "" + +#: fread.c:1568 +#, 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 "" + +#: fread.c:1584 +#, c-format +msgid "" +"Internal error: ncol==%d line==%d after detecting sep, ncol and first line" +msgstr "" + +#: fread.c:1587 +#, c-format +msgid "Internal error: first line has field count %d but expecting %d" +msgstr "" + +#: fread.c:1589 +#, 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 "" + +#: fread.c:1591 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr "" + +#: fread.c:1592 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr "" + +#: fread.c:1598 +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 is a multiple of 4096, too." +msgstr "" + +#: fread.c:1599 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr "" + +#: fread.c:1605 +msgid "" +" 1-column file ends with 2 or more end-of-line. Restoring last eol using " +"extra byte in cow page.\n" +msgstr "" + +#: fread.c:1624 +msgid "" +"[07] Detect column types, good nrow estimate and whether first row is column " +"names\n" +msgstr "" + +#: fread.c:1625 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr "" + +#: fread.c:1629 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1650 +#, c-format +msgid " Number of sampling jump points = %d because " +msgstr "" + +#: fread.c:1651 +#, c-format +msgid "nrow limit (%llu) supplied\n" +msgstr "" + +#: fread.c:1652 +msgid "jump0size==0\n" +msgstr "" + +#: fread.c:1653 +#, c-format +msgid "(%llu bytes from row 1 to eof) / (2 * %llu jump0size) == %llu\n" +msgstr "" + +#: fread.c:1691 +#, c-format +msgid "" +" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. " +"%s\n" +msgstr "" + +#: fread.c:1718 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1731 +#, 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 %d sample rows\n" +msgstr "" + +#: fread.c:1743 +msgid "" +"Internal error: row before first data row has the same number of fields but " +"we're not using it." +msgstr "" + +#: fread.c:1744 +msgid "" +"Internal error: ch!=pos after counting fields in the line before the first " +"data row." +msgstr "" + +#: fread.c:1745 +#, 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 "" + +#: fread.c:1748 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns (i.e. invalid file). " +"Added %d extra default column name%s\n" +msgstr "" + +#: fread.c:1751 +msgid "" +"Internal error: fill=true but there is a previous row which should already " +"have been filled." +msgstr "" + +#: fread.c:1752 +#, 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 "" + +#: fread.c:1756 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1776 +#, c-format +msgid "" +" 'header' determined to be %s because there are%s number fields in the " +"first and only row\n" +msgstr "" + +#: fread.c:1779 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "" + +#: fread.c:1781 +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 "" + +#: fread.c:1797 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1806 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=%llu exactly\n" +msgstr "" + +#: fread.c:1818 fread.c:1825 +msgid " =====\n" +msgstr "" + +#: fread.c:1819 +#, c-format +msgid "" +" Sampled %llu rows (handled \\n inside quoted fields) at %d jump points\n" +msgstr "" + +#: fread.c:1820 +#, c-format +msgid " Bytes from first data row on line %d to the end of last row: %llu\n" +msgstr "" + +#: fread.c:1821 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "" + +#: fread.c:1822 +#, c-format +msgid " Estimated number of rows: %llu / %.2f = %llu\n" +msgstr "" + +#: fread.c:1823 +#, c-format +msgid "" +" Initial alloc = %llu rows (%llu + %d%%) using bytes/max(mean-2*sd,min) " +"clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" + +#: fread.c:1827 +#, c-format +msgid "Internal error: sampleLines(%llu) > allocnrow(%llu)" +msgstr "" + +#: fread.c:1831 +#, c-format +msgid " Alloc limited to lower nrows=%llu passed in.\n" +msgstr "" + +#: fread.c:1843 +msgid "[08] Assign column names\n" +msgstr "" + +#: fread.c:1851 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "" + +#: fread.c:1873 +#, c-format +msgid "Internal error: reading colnames ending on '%c'" +msgstr "" + +#: fread.c:1891 +msgid "[09] Apply user overrides on column types\n" +msgstr "" + +#: fread.c:1895 +msgid " Cancelled by user: userOverride() returned false." +msgstr "" + +#: fread.c:1905 +#, c-format +msgid "Failed to allocate %d bytes for size array: %s" +msgstr "" + +#: fread.c:1912 +#, c-format +msgid "" +"Attempt to override column %d <<%.*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 "" + +#: fread.c:1926 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr "" + +#: fread.c:1934 +msgid "[10] Allocate memory for the datatable\n" +msgstr "" + +#: fread.c:1935 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with %llu rows\n" +msgstr "" + +#: fread.c:1989 +#, c-format +msgid "Buffer size %lld is too large\n" +msgstr "" + +#: fread.c:1992 +msgid "[11] Read the data\n" +msgstr "" + +#: fread.c:1995 +#, c-format +msgid " jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n" +msgstr "" + +#: fread.c:2215 +#, c-format +msgid "" +"Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n" +msgstr "" + +#: fread.c:2337 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) " +"and continue reading from jump %d\n" +msgstr "" + +#: fread.c:2344 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr "" + +#: fread.c:2364 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr "" + +#: fread.c:2400 +#, c-format +msgid "" +"Read %llu rows x %d columns from %s file in %02d:%06.3f wall clock time\n" +msgstr "" + +#: fread.c:2407 +msgid "[12] Finalizing the datatable\n" +msgstr "" + +#: fread.c:2408 +msgid " Type counts:\n" +msgstr "" + +#: fread.c:2410 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "" + +#: fread.c:2426 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "" + +#: fread.c:2431 +#, c-format +msgid "" +"Stopped early on line %llu. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" + +#: fread.c:2437 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line %llu: <<" +"%s>>. If the fields are not quoted (e.g. field separator does not appear " +"within any field), try quote=\"\" to avoid this warning." +msgstr "" + +#: fread.c:2441 +msgid "=============================\n" +msgstr "" + +#: fread.c:2443 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "" + +#: fread.c:2444 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "" + +#: fread.c:2446 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr "" + +#: fread.c:2447 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using %llu sample rows\n" +msgstr "" + +#: fread.c:2449 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of %llu rows x %d cols (%.3fGB) of which %llu " +"(%3.0f%%) rows used\n" +msgstr "" + +#: fread.c:2453 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) " +"using %d threads\n" +msgstr "" + +#: fread.c:2455 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr "" + +#: fread.c:2456 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr "" + +#: fread.c:2457 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr "" + +#: fread.c:2458 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "" + +#: fread.c:2460 +#, c-format +msgid "%8.3fs Total\n" +msgstr "" + +#: freadR.c:84 +msgid "" +"Internal error: freadR input not a single character string: a filename or " +"the data itself. Should have been caught at R level." +msgstr "" + +#: freadR.c:92 +msgid "" +"Input contains a \\n or is \")\". Taking this to be text input (not a " +"filename)\n" +msgstr "" + +#: freadR.c:95 +msgid "Input contains no \\n. Taking this to be a filename to open\n" +msgstr "" + +#: freadR.c:101 +msgid "" +"Internal error: freadR sep not a single character. R level catches this." +msgstr "" + +#: freadR.c:105 +msgid "" +"Internal error: freadR dec not a single character. R level catches this." +msgstr "" + +#: freadR.c:112 +msgid "quote= must be a single character, blank \"\", or FALSE" +msgstr "" + +#: freadR.c:137 +msgid "Internal error: skip not integer or string in freadR.c" +msgstr "" + +#: freadR.c:140 +#, c-format +msgid "Internal error: NAstringsArg is type '%s'. R level catches this" +msgstr "" + +#: freadR.c:153 +#, c-format +msgid "nThread(%d)<1" +msgstr "" + +#: freadR.c:160 +msgid "'integer64' must be a single character string" +msgstr "" + +#: freadR.c:168 +#, c-format +msgid "" +"Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or " +"'numeric'" +msgstr "" + +#: freadR.c:176 +msgid "Use either select= or drop= but not both." +msgstr "" + +#: freadR.c:179 +msgid "" +"select= is type list for specifying types in select=, but colClasses= has " +"been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:181 +msgid "" +"select= is type list but has no names; expecting list(type1=cols1, " +"type2=cols2, ...)" +msgstr "" + +#: freadR.c:188 +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 "" + +#: freadR.c:196 freadR.c:346 +msgid "colClasses is type list but has no names" +msgstr "" + +#: freadR.c:206 +#, c-format +msgid "encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'" +msgstr "" + +#: freadR.c:229 +#, c-format +msgid "Column name '%s' (%s) not found" +msgstr "" + +#: freadR.c:231 +#, c-format +msgid "%s is NA" +msgstr "" + +#: freadR.c:233 +#, c-format +msgid "%s is %d which is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:247 +msgid "Internal error: typeSize[CT_BOOL8_N] != 1" +msgstr "" + +#: freadR.c:248 +msgid "Internal error: typeSize[CT_STRING] != 1" +msgstr "" + +#: freadR.c:282 +#, c-format +msgid "" +"Column name '%s' not found in column name header (case sensitive), skipping." +msgstr "" + +#: freadR.c:292 +#, 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 "" + +#: freadR.c:293 +#, c-format +msgid "" +"select = 0 (select[%d]) has no meaning. All values of select should be in " +"the range [1,ncol=%d]." +msgstr "" + +#: freadR.c:294 +#, c-format +msgid "" +"Column number %d (select[%d]) is too large for this table, which only has %d " +"columns." +msgstr "" + +#: freadR.c:295 +#, c-format +msgid "Column number %d ('%s') has been selected twice by select=" +msgstr "" + +#: freadR.c:313 +msgid "" +"colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing" +msgstr "" + +#: freadR.c:318 +#, 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 "" + +#: freadR.c:329 +msgid "Internal error: selectInts is NULL but selectColClasses is true" +msgstr "" + +#: freadR.c:330 +msgid "" +"Internal error: length(selectSxp)!=length(colClassesSxp) but " +"selectColClasses is true" +msgstr "" + +#: freadR.c:344 +#, c-format +msgid "colClasses is type '%s' but should be list or character" +msgstr "" + +#: freadR.c:368 +#, c-format +msgid "Column name '%s' (colClasses[[%d]][%d]) not found" +msgstr "" + +#: freadR.c:370 +#, c-format +msgid "colClasses[[%d]][%d] is NA" +msgstr "" + +#: freadR.c:374 +#, c-format +msgid "" +"Column %d ('%s') appears more than once in colClasses. The second time is " +"colClasses[[%d]][%d]." +msgstr "" + +#: freadR.c:381 +#, c-format +msgid "Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:583 +#, c-format +msgid "Field size is 1 but the field is of type %d\n" +msgstr "" + +#: freadR.c:592 +#, c-format +msgid "Internal error: unexpected field of size %d\n" +msgstr "" + +#: freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + +#: froll.c:18 froll.c:227 froll.c:411 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "" + +#: froll.c:36 froll.c:244 froll.c:460 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "" + +#: froll.c:43 froll.c:251 frolladaptive.c:23 frolladaptive.c:218 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "" + +#: froll.c:52 froll.c:255 +#, c-format +msgid "%s: running for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:72 froll.c:82 froll.c:173 froll.c:275 froll.c:285 froll.c:366 +#: frolladaptive.c:62 frolladaptive.c:151 frolladaptive.c:251 +#: frolladaptive.c:330 +#, 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 "" + +#: froll.c:75 froll.c:177 froll.c:278 froll.c:370 frolladaptive.c:65 +#: frolladaptive.c:155 frolladaptive.c:254 frolladaptive.c:334 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "" + +#: froll.c:85 froll.c:288 +#, 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 "" + +#: froll.c:141 froll.c:339 +#, c-format +msgid "" +"%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:179 froll.c:372 frolladaptive.c:157 frolladaptive.c:336 +#, 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 "" + +#: froll.c:428 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "" + +#: froll.c:435 +#, 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 "" + +#: froll.c:438 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "" + +#: froll.c:467 +#, c-format +msgid "%s: took %.3fs\n" +msgstr "" + +#: frollR.c:15 +msgid "x must be of type numeric or logical" +msgstr "" + +#: frollR.c:26 +msgid "x must be list, data.frame or data.table of numeric or logical types" +msgstr "" + +#: frollR.c:47 frollR.c:264 +msgid "n must be non 0 length" +msgstr "" + +#: frollR.c:50 +msgid "adaptive must be TRUE or FALSE" +msgstr "" + +#: frollR.c:58 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "" + +#: frollR.c:65 frollR.c:256 frollR.c:259 +msgid "n must be integer" +msgstr "" + +#: frollR.c:72 +msgid "n must be positive integer values (> 0)" +msgstr "" + +#: frollR.c:81 frollR.c:93 +msgid "n must be integer vector or list of integer vectors" +msgstr "" + +#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 +#: gsumm.c:1261 gsumm.c:1402 uniqlist.c:350 +msgid "na.rm must be TRUE or FALSE" +msgstr "" + +#: frollR.c:107 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "" + +#: frollR.c:109 +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 "" + +#: frollR.c:119 frollR.c:275 +msgid "" +"Internal error: invalid align argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:122 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "" + +#: frollR.c:126 frollR.c:297 types.c:64 +#, c-format +msgid "%s: allocating memory for results %dx%d\n" +msgstr "" + +#: frollR.c:135 +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 "" + +#: frollR.c:137 +msgid "" +"length of integer vector(s) provided as list to 'n' argument must be equal " +"to number of observations provided in 'x'" +msgstr "" + +#: frollR.c:151 +msgid "" +"Internal error: invalid fun argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "" + +#: frollR.c:169 frollR.c:292 +msgid "fill must be numeric" +msgstr "" + +#: frollR.c:185 +msgid "" +"Internal error: invalid algo argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:190 +#, c-format +msgid "Internal error: badaptive=%d but ik is not integer" +msgstr "" + +#: frollR.c:198 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), if product > 1 then entering parallel " +"execution\n" +msgstr "" + +#: frollR.c:200 +#, 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 "" + +#: frollR.c:219 +#, c-format +msgid "Internal error: Unknown sfun value in froll: %d" +msgstr "" + +#: frollR.c:227 frollR.c:328 +#, c-format +msgid "%s: processing of %d column(s) and %d window(s) took %.3fs\n" +msgstr "" + +#: frollR.c:238 +msgid "internal error: 'fun' must be a function" +msgstr "" + +#: frollR.c:240 +msgid "internal error: 'rho' should be an environment" +msgstr "" + +#: frolladaptive.c:33 frolladaptive.c:222 +#, c-format +msgid "%s: running for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: frolladaptive.c:39 frolladaptive.c:228 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "" + +#: frolladaptive.c:75 frolladaptive.c:264 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "" + +#: frolladaptive.c:118 frolladaptive.c:302 +#, c-format +msgid "%s: running in parallel for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: fsort.c:111 +msgid "x must be a vector of type 'double' currently" +msgstr "" + +#: fsort.c:122 +#, c-format +msgid "nth=%d, nBatch=%d\n" +msgstr "" + +#: fsort.c:156 +#, c-format +msgid "Range = [%g,%g]\n" +msgstr "" + +#: fsort.c:157 +msgid "Cannot yet handle negatives." +msgstr "" + +#: fsort.c:170 +#, c-format +msgid "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" +msgstr "" + +#: fsort.c:173 +msgid "Unable to allocate working memory" +msgstr "" + +#: fsort.c:177 +#, c-format +msgid "" +"counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n" +msgstr "" + +#: fsort.c:230 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +msgstr "" + +#: fsort.c:246 +msgid "Top 5 MSB counts: " +msgstr "" + +#: fsort.c:246 +#, c-format +msgid "%lld " +msgstr "" + +#: fsort.c:246 fwrite.c:690 fwrite.c:947 +msgid "\n" +msgstr "" + +#: fsort.c:247 +#, c-format +msgid "Reduced MSBsize from %d to " +msgstr "" + +#: fsort.c:251 +#, c-format +msgid "%d by excluding 0 and 1 counts\n" +msgstr "" + +#: fsort.c:308 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" +msgstr "" + +#: fwrite.c:601 +#, c-format +msgid "buffMB=%d outside [1,1024]" +msgstr "" + +#: fwrite.c:608 +#, c-format +msgid "" +"eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" +msgstr "" + +#: fwrite.c:611 +msgid "Column writers: " +msgstr "" + +#: fwrite.c:613 fwrite.c:615 fwrite.c:617 +#, c-format +msgid "%d " +msgstr "" + +#: fwrite.c:616 +msgid "... " +msgstr "" + +#: fwrite.c:619 +#, c-format +msgid "" +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%lld args.ncol=%d " +"eolLen=%d\n" +msgstr "" + +#: fwrite.c:652 +#, c-format +msgid "Internal error: type %d has no max length method implemented" +msgstr "" + +#: fwrite.c:659 +#, c-format +msgid "maxLineLen=%zd. Found in %.3fs\n" +msgstr "" + +#: fwrite.c:679 +#, 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 "" + +#: fwrite.c:680 +#, 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 "" + +#: fwrite.c:688 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " +msgstr "" + +#: fwrite.c:701 +#, c-format +msgid "Unable to allocate %d MiB for header: %s" +msgstr "" + +#: fwrite.c:729 fwrite.c:789 +msgid "Can't allocate gzip stream structure" +msgstr "" + +#: fwrite.c:735 +#, c-format +msgid "Unable to allocate %d MiB for zbuffer: %s" +msgstr "" + +#: fwrite.c:750 +#, c-format +msgid "Compress gzip error: %d" +msgstr "" + +#: fwrite.c:751 fwrite.c:759 fwrite.c:953 +#, c-format +msgid "%s: '%s'" +msgstr "" + +#: fwrite.c:756 +#, c-format +msgid "done in %.3fs\n" +msgstr "" + +#: fwrite.c:758 +msgid "No data rows present (nrow==0)\n" +msgstr "" + +#: fwrite.c:776 +#, c-format +msgid "" +"Writing %lld rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d)\n" +msgstr "" + +#: fwrite.c:961 +#, c-format +msgid "zlib v%s deflate() returned error %d with z_stream.msg '%s'. %s\n" +msgstr "" + +#: fwrite.c:962 +msgid "Please include the full output above in your data.table bug report." +msgstr "" + +#: fwrite.c:963 +msgid "" +"Please retry fwrite() with verbose=TRUE and include the full output with " +"your data.table bug report." +msgstr "" + +#: fwriteR.c:41 +msgid "Internal error: col passed to getMaxCategLen is missing levels" +msgstr "" + +#: fwriteR.c:75 +msgid "Internal error: getMaxListItemLen should have caught this up front." +msgstr "" + +#: fwriteR.c:98 +#, c-format +msgid "" +"Row %d 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 "" + +#: fwriteR.c:103 +#, c-format +msgid "" +"Internal error: row %d of list column has no max length method implemented" +msgstr "" + +#: fwriteR.c:170 +msgid "" +"fwrite must be passed an object of type list; e.g. data.frame, data.table" +msgstr "" + +#: fwriteR.c:179 +msgid "fwrite was passed an empty list of no columns. Nothing to write." +msgstr "" + +#: fwriteR.c:234 +#, c-format +msgid "Column %d's length (%d) is not the same as column 1's length (%d)" +msgstr "" + +#: fwriteR.c:237 +#, c-format +msgid "Column %d's type is '%s' - not yet implemented in fwrite." +msgstr "" + +#: fwriteR.c:262 +msgid "" +"No list columns are present. Setting sep2='' otherwise quote='auto' would " +"quote fields containing sep2.\n" +msgstr "" + +#: fwriteR.c:266 +#, 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 "" + +#: fwriteR.c:270 +#, c-format +msgid "" +"sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " +"list column." +msgstr "" + +#: gsumm.c:43 +msgid "env is not an environment" +msgstr "" + +#: gsumm.c:45 +msgid "o is not an integer vector" +msgstr "" + +#: gsumm.c:46 +msgid "f is not an integer vector" +msgstr "" + +#: gsumm.c:47 +msgid "l is not an integer vector" +msgstr "" + +#: gsumm.c:56 +msgid "irowsArg is neither an integer vector nor NULL" +msgstr "" + +#: gsumm.c:58 +#, c-format +msgid "length(f)=%d != length(l)=%d" +msgstr "" + +#: gsumm.c:66 +#, c-format +msgid "o has length %d but sum(l)=%d" +msgstr "" + +#: gsumm.c:69 +msgid "Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn" +msgstr "" + +#: gsumm.c:89 +#, c-format +msgid "" +"Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " +"batchSize=%d lastBatchSize=%d\n" +msgstr "" + +#: gsumm.c:98 +#, c-format +msgid "gforce initial population of grp took %.3f\n" +msgstr "" + +#: gsumm.c:116 +msgid "" +"Internal error: Failed to allocate counts or TMP when assigning g in gforce" +msgstr "" + +#: gsumm.c:194 +#, c-format +msgid "gforce assign high and low took %.3f\n" +msgstr "" + +#: gsumm.c:200 +#, c-format +msgid "gforce eval took %.3f\n" +msgstr "" + +#: gsumm.c:216 +msgid "gather took ... " +msgstr "" + +#: gsumm.c:334 +#, c-format +msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" +msgstr "" + +#: gsumm.c:336 gsumm.c:568 +#, c-format +msgid "%.3fs\n" +msgstr "" + +#: gsumm.c:345 +msgid "sum is not meaningful for factors." +msgstr "" + +#: gsumm.c:349 +#, c-format +msgid "This gsum took (narm=%s) ... " +msgstr "" + +#: gsumm.c:350 gsumm.c:606 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gsum" +msgstr "" + +#: gsumm.c:404 +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 "" + +#: gsumm.c:565 +#, c-format +msgid "" +"Type '%s' not supported by GForce sum (gsum). Either add the prefix base::" +"sum(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:578 +msgid "" +"GForce mean can only be applied to columns, not .SD or similar. Likely " +"you're looking for 'DT[,lapply(.SD,mean),by=,.SDcols=]'. See ?data.table." +msgstr "" + +#: gsumm.c:579 +msgid "mean is not meaningful for factors." +msgstr "" + +#: gsumm.c:599 +#, c-format +msgid "Internal error: gsum returned type '%s'. typeof(x) is '%s'" +msgstr "" + +#: gsumm.c:609 +#, c-format +msgid "Unable to allocate %d * %d bytes for sum in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:612 +#, c-format +msgid "Unable to allocate %d * %d bytes for counts in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:638 +#, c-format +msgid "Unable to allocate %d * %d bytes for si in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:650 +#, c-format +msgid "" +"Type '%s' not supported by GForce mean (gmean) na.rm=TRUE. Either add the " +"prefix base::mean(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:674 +msgid "Internal error: unsupported type at the end of gmean" +msgstr "" + +#: gsumm.c:687 +msgid "" +"GForce min can only be applied to columns, not .SD or similar. To find min " +"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 "" + +#: gsumm.c:688 +msgid "min is not meaningful for factors." +msgstr "" + +#: gsumm.c:693 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmin" +msgstr "" + +#: gsumm.c:717 gsumm.c:850 +msgid "" +"No non-missing values found in at least one group. Coercing to numeric type " +"and returning 'Inf' for such groups to be consistent with base" +msgstr "" + +#: gsumm.c:756 gsumm.c:891 +msgid "" +"No non-missing values found in at least one group. Returning 'NA' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:783 +msgid "" +"No non-missing values found in at least one group. Returning 'Inf' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:791 +msgid "Type 'complex' has no well-defined min" +msgstr "" + +#: gsumm.c:794 +#, c-format +msgid "" +"Type '%s' not supported by GForce min (gmin). Either add the prefix base::" +"min(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:806 +msgid "" +"GForce max can only be applied to columns, not .SD or similar. To find max " +"of all items in a list such as .SD, either add the prefix base::max(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,max),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:807 +msgid "max is not meaningful for factors." +msgstr "" + +#: gsumm.c:812 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmax" +msgstr "" + +#: gsumm.c:930 +msgid "" +"No non-missing values found in at least one group. Returning '-Inf' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:937 +msgid "Type 'complex' has no well-defined max" +msgstr "" + +#: gsumm.c:940 +#, c-format +msgid "" +"Type '%s' not supported by GForce max (gmax). Either add the prefix base::" +"max(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:951 +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 "" + +#: gsumm.c:952 +msgid "median is not meaningful for factors." +msgstr "" + +#: gsumm.c:955 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmedian" +msgstr "" + +#: gsumm.c:992 +#, c-format +msgid "" +"Type '%s' not supported by GForce median (gmedian). Either add the prefix " +"stats::median(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:1005 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gtail" +msgstr "" + +#: gsumm.c:1073 +#, c-format +msgid "" +"Type '%s' not supported by GForce tail (gtail). Either add the prefix utils::" +"tail(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1085 gsumm.c:1176 +#, c-format +msgid "nrow [%d] != length(x) [%d] in ghead" +msgstr "" + +#: gsumm.c:1153 +#, c-format +msgid "" +"Type '%s' not supported by GForce head (ghead). Either add the prefix utils::" +"head(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1161 +msgid "" +"Internal error, gtail is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1166 +msgid "" +"Internal error, ghead is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1172 +msgid "" +"Internal error, `g[` (gnthvalue) is only implemented single value subsets " +"with positive index, e.g., .SD[2]. This should have been caught before. " +"please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1250 +#, c-format +msgid "" +"Type '%s' not supported by GForce subset `[` (gnthvalue). Either add the " +"prefix utils::head(.) or turn off GForce optimization using " +"options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1262 +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 "" + +#: gsumm.c:1263 +msgid "var/sd is not meaningful for factors." +msgstr "" + +#: gsumm.c:1266 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gvar" +msgstr "" + +#: gsumm.c:1382 +#, c-format +msgid "" +"Type '%s' not supported by GForce var (gvar). Either add the prefix stats::" +"var(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1384 +#, c-format +msgid "" +"Type '%s' not supported by GForce sd (gsd). Either add the prefix stats::" +"sd(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1403 +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 "" + +#: gsumm.c:1404 +msgid "prod is not meaningful for factors." +msgstr "" + +#: gsumm.c:1409 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gprod" +msgstr "" + +#: gsumm.c:1411 +#, c-format +msgid "Unable to allocate %d * %d bytes for gprod" +msgstr "" + +#: gsumm.c:1446 +#, c-format +msgid "" +"Type '%s' not supported by GForce prod (gprod). Either add the prefix base::" +"prod(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: ijoin.c:22 ijoin.c:243 +msgid "" +"Internal error: invalid value for 'mult'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:29 ijoin.c:250 +msgid "" +"Internal error: invalid value for 'type'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:56 ijoin.c:121 +#, c-format +msgid "Internal error: unknown type in mult=%d in lookup: %d" +msgstr "" + +#: ijoin.c:124 ijoin.c:215 +#, c-format +msgid "Internal error: unknown mult in lookup: %d" +msgstr "" + +#: ijoin.c:128 +#, c-format +msgid "First pass on calculating lengths in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:141 +#, c-format +msgid "Second pass on allocation in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:160 +#, c-format +msgid "Internal error: unknown type lookup should have been caught earlier: %d" +msgstr "" + +#: ijoin.c:212 +#, c-format +msgid "" +"Internal error: unknown type in mult=%d in lookup should have been caught " +"earlier: %d" +msgstr "" + +#: ijoin.c:220 +#, c-format +msgid "Final step in generating lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:323 +#, c-format +msgid "Internal error: unknown type in mult=ALL in overlaps: %d" +msgstr "" + +#: ijoin.c:328 +#, c-format +msgid "" +"First pass on calculating lengths in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:464 ijoin.c:571 ijoin.c:720 +#, c-format +msgid "Internal error: unknown type in mult=%d in overlaps: %d" +msgstr "" + +#: ijoin.c:723 +#, c-format +msgid "Internal error: unknown mult in overlaps: %d" +msgstr "" + +#: ijoin.c:727 +#, c-format +msgid "Final step, fetching indices in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: init.c:198 +#, c-format +msgid "" +"Pointers are %d bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "" + +#: init.c:209 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "" + +#: init.c:210 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "" + +#: init.c:211 +#, c-format +msgid "Checking sizeof(int) [%d] is 4 %s" +msgstr "" + +#: init.c:212 +#, c-format +msgid "Checking sizeof(double) [%d] is 8 %s" +msgstr "" + +#: init.c:214 +#, c-format +msgid "Checking sizeof(long long) [%d] is 8 %s" +msgstr "" + +#: init.c:215 +#, c-format +msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" +msgstr "" + +#: init.c:216 +#, c-format +msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" +msgstr "" + +#: init.c:217 +#, c-format +msgid "Checking sizeof(uint64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:218 +#, c-format +msgid "Checking sizeof(int64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:219 +#, c-format +msgid "Checking sizeof(signed char) [%d] is 1 %s" +msgstr "" + +#: init.c:220 +#, c-format +msgid "Checking sizeof(int8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:221 +#, c-format +msgid "Checking sizeof(uint8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:222 +#, c-format +msgid "Checking sizeof(int16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:223 +#, c-format +msgid "Checking sizeof(uint16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:226 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "" + +#: init.c:227 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" +msgstr "" + +#: init.c:234 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "" + +#: init.c:237 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "" + +#: init.c:240 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "" + +#: init.c:243 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "" + +#: init.c:246 +msgid "The ascii character '/' is not just before '0'" +msgstr "" + +#: init.c:247 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "" + +#: init.c:248 +msgid "The ascii character ':' is not just after '9'" +msgstr "" + +#: init.c:249 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "" + +#: init.c:254 +#, c-format +msgid "Conversion of NA_INT64 via double failed %lld!=%lld" +msgstr "" + +#: init.c:258 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "" + +#: init.c:259 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "" + +#: init.c:260 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:261 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:290 +#, c-format +msgid "PRINTNAME(install(\")integer64\")) has returned %s not %s" +msgstr "" + +#: init.c:359 +msgid ".Last.value in namespace is not a length 1 integer" +msgstr "" + +#: nafill.c:83 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "" + +#: nafill.c:85 nafill.c:95 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "" + +#: nafill.c:133 nafill.c:161 +msgid "" +"Internal error: invalid type argument in nafillR function, should have been " +"caught before. Please report to data.table issue tracker." +msgstr "" + +#: nafill.c:177 +#, c-format +msgid "%s: parallel processing of %d column(s) took %.3fs\n" +msgstr "" + +#: openmp-utils.c:22 +#, 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 "" + +#: openmp-utils.c:40 +#, 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 "" + +#: openmp-utils.c:67 +msgid "'verbose' must be TRUE or FALSE" +msgstr "" + +#: openmp-utils.c:70 +msgid "" +"This installation of data.table has not been compiled with OpenMP support.\n" +msgstr "" + +#: openmp-utils.c:75 +#, c-format +msgid " omp_get_num_procs() %d\n" +msgstr "" + +#: openmp-utils.c:76 +#, c-format +msgid " R_DATATABLE_NUM_PROCS_PERCENT %s\n" +msgstr "" + +#: openmp-utils.c:77 +#, c-format +msgid " R_DATATABLE_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:78 +#, c-format +msgid " omp_get_thread_limit() %d\n" +msgstr "" + +#: openmp-utils.c:79 +#, c-format +msgid " omp_get_max_threads() %d\n" +msgstr "" + +#: openmp-utils.c:80 +#, c-format +msgid " OMP_THREAD_LIMIT %s\n" +msgstr "" + +#: openmp-utils.c:81 +#, c-format +msgid " OMP_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:82 +#, c-format +msgid " RestoreAfterFork %s\n" +msgstr "" + +#: openmp-utils.c:83 +#, c-format +msgid " data.table is using %d threads. See ?setDTthreads.\n" +msgstr "" + +#: openmp-utils.c:91 +msgid "" +"restore_after_fork= must be TRUE, FALSE, or NULL (default). " +"getDTthreads(verbose=TRUE) reports the current setting.\n" +msgstr "" + +#: openmp-utils.c:105 +#, c-format +msgid "" +"threads= must be either NULL (default) or a single number. It has length %d" +msgstr "" + +#: openmp-utils.c:107 +msgid "threads= must be either NULL (default) or type integer/numeric" +msgstr "" + +#: openmp-utils.c:109 +msgid "" +"threads= must be either NULL or a single integer >= 0. See ?setDTthreads." +msgstr "" + +#: openmp-utils.c:114 +msgid "Internal error: percent= must be TRUE or FALSE at C level" +msgstr "" + +#: openmp-utils.c:117 +#, c-format +msgid "" +"Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C " +"level)." +msgstr "" + +#: rbindlist.c:8 +msgid "fill= should be TRUE or FALSE" +msgstr "" + +#: rbindlist.c:10 +msgid "use.names= should be TRUE, FALSE, or not used (\"check\" by default)" +msgstr "" + +#: rbindlist.c:12 +msgid "" +"Input to rbindlist must be a list. This list can contain data.tables, data." +"frames or plain lists." +msgstr "" + +#: rbindlist.c:16 +msgid "use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE." +msgstr "" + +#: rbindlist.c:20 +msgid "Internal error: rbindlist.c idcol is not a single string" +msgstr "" + +#: rbindlist.c:31 +#, c-format +msgid "Item %d of input is not a data.frame, data.table or list" +msgstr "" + +#: rbindlist.c:39 +#, c-format +msgid "" +"Item %d has %d columns, inconsistent with item %d which has %d columns. To " +"fill missing columns use fill=TRUE." +msgstr "" + +#: rbindlist.c:42 +#, c-format +msgid "Item %d has %d columns but %d column names. Invalid object." +msgstr "" + +#: rbindlist.c:49 +#, 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 "" + +#: rbindlist.c:58 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has " +"been filled with NA (NULL for list columns) to make each item uniform." +msgstr "" + +#: rbindlist.c:62 +#, c-format +msgid "" +"Total rows in the list is %lld which is larger than the maximum number of " +"rows, currently %d" +msgstr "" + +#: rbindlist.c:63 +msgid "use.names=TRUE but no item of input list has any names" +msgstr "" + +#: rbindlist.c:71 +#, c-format +msgid "" +"Failed to allocate upper bound of %lld unique column names [sum(lapply(l," +"ncol))]" +msgstr "" + +#: rbindlist.c:102 +#, c-format +msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:136 +#, c-format +msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:191 +msgid "" +"Internal error: usenames==NA but fill=TRUE. usenames should have been set to " +"TRUE earlier with warning." +msgstr "" + +#: rbindlist.c:196 +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 "" + +#: rbindlist.c:206 +msgid "" +"Internal error: could not find the first column name not present in earlier " +"item" +msgstr "" + +#: rbindlist.c:210 +#, 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 "" + +#: rbindlist.c:218 +#, c-format +msgid "" +"Internal error: usenames==NA but an out-of-order name has been found in an " +"item with no names or the first item. [%d]" +msgstr "" + +#: rbindlist.c:219 +#, 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 "" + +#: rbindlist.c:228 +msgid "" +"options()$datatable.rbindlist.check is set but is not a single string. See " +"news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:235 +#, c-format +msgid "" +"options()$datatable.rbindlist.check=='%s' which is not " +"'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:297 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" + +#: rbindlist.c:315 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d." +msgstr "" + +#: rbindlist.c:325 +#, c-format +msgid "" +"Internal error: column %d of result is determined to be integer64 but " +"maxType=='%s' != REALSXP" +msgstr "" + +#: rbindlist.c:361 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "" + +#: rbindlist.c:382 +#, 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 "" + +#: rbindlist.c:387 +#, 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 "" + +#: rbindlist.c:432 +#, c-format +msgid "" +"Failed to allocate working memory for %d factor levels of result column %d " +"when reading item %d of item %d" +msgstr "" + +#: rbindlist.c:522 +#, c-format +msgid "Column %d of item %d: %s" +msgstr "" + +#: reorder.c:17 +#, c-format +msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:19 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d). Invalid " +"data.table." +msgstr "" + +#: reorder.c:27 +#, c-format +msgid "" +"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " +"supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:28 +msgid "" +"Internal error in reorder.c: cannot reorder an ALTREP vector. Please see " +"NEWS item 2 in v1.11.4 and report this as a bug." +msgstr "" + +#: reorder.c:33 +msgid "order must be an integer vector" +msgstr "" + +#: reorder.c:34 +#, c-format +msgid "nrow(x)[%d]!=length(order)[%d]" +msgstr "" + +#: reorder.c:48 +#, c-format +msgid "order is not a permutation of 1:nrow[%d]" +msgstr "" + +#: reorder.c:57 +#, c-format +msgid "" +"Unable to allocate %d * %d bytes of working memory for reordering data.table" +msgstr "" + +#: shift.c:17 +#, c-format +msgid "" +"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" +msgstr "" + +#: shift.c:24 shift.c:28 +msgid "" +"Internal error: invalid type for shift(), should have been caught before. " +"please report to data.table issue tracker" +msgstr "" + +#: shift.c:31 +msgid "Internal error: k must be integer" +msgstr "" + +#: shift.c:33 +#, c-format +msgid "Item %d of n is NA" +msgstr "" + +#: shift.c:157 +#, c-format +msgid "Unsupported type '%s'" +msgstr "" + +#: subset.c:7 +#, c-format +msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" +msgstr "" + +#: subset.c:88 +#, c-format +msgid "" +"Internal error: column type '%s' not supported by data.table subset. All " +"known types are supported so please report as bug." +msgstr "" + +#: subset.c:97 subset.c:121 +#, c-format +msgid "Internal error. 'idx' is type '%s' not 'integer'" +msgstr "" + +#: subset.c:122 +#, c-format +msgid "" +"Internal error. 'maxArg' is type '%s' and length %d, should be an integer " +"singleton" +msgstr "" + +#: subset.c:123 +msgid "Internal error: allowOverMax must be TRUE/FALSE" +msgstr "" + +#: subset.c:125 +#, c-format +msgid "Internal error. max is %d, must be >= 0." +msgstr "" + +#: subset.c:149 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]" +msgstr "" + +#: subset.c:161 +#, c-format +msgid "" +"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." +msgstr "" + +#: subset.c:171 +#, c-format +msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." +msgstr "" + +#: subset.c:207 +#, 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 "" + +#: subset.c:209 +#, 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 "" + +#: subset.c:223 +#, c-format +msgid "Column %d is NULL; malformed data.table." +msgstr "" + +#: subset.c:226 +#, c-format +msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." +msgstr "" + +#: subset.c:231 +#, c-format +msgid "" +"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." +"table." +msgstr "" + +#: subset.c:247 +#, c-format +msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" +msgstr "" + +#: subset.c:260 +#, c-format +msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" +msgstr "" + +#: subset.c:337 +msgid "" +"Internal error: NULL can not be subset. It is invalid for a data.table to " +"contain a NULL column." +msgstr "" + +#: subset.c:339 +msgid "" +"Internal error: CsubsetVector is internal-use-only but has received " +"negatives, zeros or out-of-range" +msgstr "" + +#: transpose.c:9 +msgid "l must be a list." +msgstr "" + +#: transpose.c:13 +msgid "ignore.empty should be logical TRUE/FALSE." +msgstr "" + +#: 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 "" + +#: transpose.c:19 +msgid "fill must be a length 1 vector, such as the default NA" +msgstr "" + +#: transpose.c:28 +#, c-format +msgid "Item %d of list input is not an atomic vector" +msgstr "" + +#: types.c:55 +msgid "internal error: status, nx, nk must be integer" +msgstr "" + +#: uniqlist.c:14 +msgid "Internal error: uniqlist has not been passed a list of columns" +msgstr "" + +#: uniqlist.c:17 +msgid "Internal error: uniqlist has been passed a non-integer order" +msgstr "" + +#: uniqlist.c:18 +msgid "Internal error: uniqlist has been passed a length-0 order" +msgstr "" + +#: uniqlist.c:19 +#, c-format +msgid "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" +msgstr "" + +#: uniqlist.c:96 uniqlist.c:127 uniqlist.c:208 uniqlist.c:245 uniqlist.c:318 +#, c-format +msgid "Type '%s' not supported" +msgstr "" + +#: uniqlist.c:148 +msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" +msgstr "" + +#: uniqlist.c:149 +msgid "" +"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" +msgstr "" + +#: uniqlist.c:167 +msgid "cols must be an integer vector with length >= 1" +msgstr "" + +#: uniqlist.c:171 +#, c-format +msgid "Item %d of cols is %d which is outside range of l [1,length(l)=%d]" +msgstr "" + +#: uniqlist.c:174 +#, c-format +msgid "" +"All elements to input list must be of same length. Element [%d] has length " +"%llu != length of first element = %llu." +msgstr "" + +#: uniqlist.c:255 +msgid "Internal error: nestedid was not passed a list length 1 or more" +msgstr "" + +#: uniqlist.c:262 +#, c-format +msgid "Internal error: nrows[%d]>0 but ngrps==0" +msgstr "" + +#: uniqlist.c:264 +msgid "cols must be an integer vector of positive length" +msgstr "" + +#: uniqlist.c:349 +msgid "x is not a logical vector" +msgstr "" + +#: utils.c:73 +#, c-format +msgid "Unsupported type '%s' passed to allNA()" +msgstr "" + +#: utils.c:92 +msgid "'x' argument must be data.table compatible" +msgstr "" + +#: utils.c:94 +msgid "'check_dups' argument must be TRUE or FALSE" +msgstr "" + +#: utils.c:110 +msgid "" +"argument specifying columns is type 'double' and one or more items in it are " +"not whole integers" +msgstr "" + +#: utils.c:116 +#, c-format +msgid "argument specifying columns specify non existing column(s): cols[%d]=%d" +msgstr "" + +#: utils.c:121 +msgid "'x' argument data.table has no names" +msgstr "" + +#: utils.c:126 +#, c-format +msgid "" +"argument specifying columns specify non existing column(s): cols[%d]='%s'" +msgstr "" + +#: utils.c:129 +msgid "argument specifying columns must be character or numeric" +msgstr "" + +#: utils.c:132 +msgid "argument specifying columns specify duplicated column(s)" +msgstr "" + +#: utils.c:138 +#, c-format +msgid "%s: fill argument must be length 1" +msgstr "" + +#: utils.c:171 +#, c-format +msgid "%s: fill argument must be numeric" +msgstr "" + +#: utils.c:273 +#, c-format +msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" +msgstr "" + +#: utils.c:277 +#, c-format +msgid "" +"Internal error: type '%s' passed to copyAsPlain() but it seems " +"copyMostAttrib() retains ALTREP attributes" +msgstr "" + +#: utils.c:312 +#, c-format +msgid "Found and copied %d column%s with a shared memory address\n" +msgstr "" + +#: vecseq.c:13 +msgid "x must be an integer vector" +msgstr "" + +#: vecseq.c:14 +msgid "len must be an integer vector" +msgstr "" + +#: vecseq.c:15 +msgid "x and len must be the same length" +msgstr "" + +#: 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 "" + +#: vecseq.c:25 +msgid "clamp must be a double vector length 1" +msgstr "" + +#: vecseq.c:27 +msgid "clamp must be positive" +msgstr "" + +#: 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 "" + +#: wrappers.c:11 +msgid "Attribute name must be a character vector of length 1" +msgstr "" + +#: 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 "" + +#: wrappers.c:59 +msgid "First argument to setlistelt must be a list()" +msgstr "" + +#: wrappers.c:60 +msgid "Second argument to setlistelt must a length 1 integer vector" +msgstr "" + +#: wrappers.c:62 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "" + +#: wrappers.c:84 +msgid "x isn't a VECSXP" +msgstr "" + +#: wrappers.c:99 +#, c-format +msgid "" +"dim.data.table expects a data.table as input (which is a list), but seems to " +"be of type %s" +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000000..67b01a075d --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,4378 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-21 16:15+0800\n" +"PO-Revision-Date: 2019-10-04 17:06+08\n" +"Last-Translator: Michael Chirico \n" +"Language-Team: Mandarin\n" +"Language: Mandarin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: assign.c:9 +msgid "Internal error: finalizer hasn't received an ExternalPtr" +msgstr "" + +#: assign.c:11 +msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +msgstr "" + +#: assign.c:14 +#, c-format +msgid "Internal error: finalizer sees l=%d, tl=%d" +msgstr "" + +#: assign.c:123 +msgid "" +".internal.selfref ptr is NULL. 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 data.table issue " +"tracker.\n" +msgstr "" + +#: assign.c:126 +msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" +msgstr "" + +#: assign.c:128 +msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" +msgstr "" + +#: assign.c:170 +msgid "Internal error: length(names)>0 but =0 and not NA." +msgstr "" + +#: assign.c:241 fsort.c:109 nafill.c:73 +msgid "verbose must be TRUE or FALSE" +msgstr "" + +#: assign.c:289 +msgid "assign has been passed a NULL dt" +msgstr "" + +#: assign.c:290 +msgid "dt passed to assign isn't type VECSXP" +msgstr "" + +#: assign.c:292 +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 "" + +#: assign.c:300 +msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" +msgstr "" + +#: assign.c:304 +msgid "dt passed to assign has no names" +msgstr "" + +#: assign.c:306 +#, c-format +msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" +msgstr "" + +#: assign.c:308 +msgid "" +"data.table is NULL; malformed. A null data.table should be an empty list. " +"typeof() should always return 'list' for data.table." +msgstr "" + +#: assign.c:317 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "" + +#: assign.c:322 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:325 +#, 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 "" + +#: assign.c:331 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]." +msgstr "" + +#: assign.c:334 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "" + +#: assign.c:342 +#, c-format +msgid "Added %d new column%s initialized with all-NA\n" +msgstr "" + +#: assign.c:347 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "" + +#: assign.c:361 +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 "" + +#: assign.c:372 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:375 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" + +#: assign.c:377 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "" + +#: assign.c:378 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "" + +#: assign.c:380 +#, c-format +msgid "RHS_list_of_columns == %s\n" +msgstr "" + +#: assign.c:385 +#, 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 "" + +#: assign.c:390 +#, 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 "" + +#: assign.c:395 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" +msgstr "" + +#: assign.c:397 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "" + +#: assign.c:405 +#, 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 "" + +#: assign.c:406 +#, 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 "" + +#: assign.c:411 +msgid "When deleting columns, i should not be provided" +msgstr "" + +#: assign.c:417 +#, 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 "" + +#: assign.c:422 +#, c-format +msgid "" +"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" +msgstr "" + +#: assign.c:424 +#, c-format +msgid "Column '%s' does not exist to remove" +msgstr "" + +#: assign.c:430 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "" + +#: assign.c:434 +#, c-format +msgid "" +"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " +"character, factor, integer or numeric)" +msgstr "" + +#: assign.c:439 +#, 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 "" + +#: assign.c:449 +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 "" + +#: assign.c:450 +#, c-format +msgid "" +"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +"issue tracker, including result of sessionInfo()." +msgstr "" + +#: assign.c:452 +#, 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 "" + +#: assign.c:454 +#, c-format +msgid "" +"Internal error: DT passed to assign has not been allocated enough column " +"slots. l=%d, tl=%d, adding %d" +msgstr "" + +#: assign.c:456 +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 "" + +#: assign.c:460 +#, c-format +msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" +msgstr "" + +#: assign.c:471 +msgid "" +"Internal error: earlier error 'When deleting columns, i should not be " +"provided' did not happen." +msgstr "" + +#: assign.c:482 +#, c-format +msgid "" +"RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but " +"then is being plonked. length(values)==%d; length(cols)==%d)\n" +msgstr "" + +#: assign.c:487 +#, c-format +msgid "Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n" +msgstr "" + +#: assign.c:556 +#, 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 "" + +#: assign.c:564 +msgid "Internal error: index name ends with trailing __" +msgstr "" + +#: assign.c:569 +msgid "Internal error: Couldn't allocate memory for s4." +msgstr "" + +#: assign.c:580 +msgid "Internal error: Couldn't allocate memory for s5." +msgstr "" + +#: assign.c:601 assign.c:617 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:610 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:687 +#, c-format +msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" +msgstr "" + +#: assign.c:691 +msgid "Internal error: memrecycle has received NULL colname" +msgstr "" + +#: assign.c:717 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" + +#: assign.c:731 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "" + +#: assign.c:739 +#, 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 "" + +#: assign.c:745 +#, c-format +msgid "" +"Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " +"character, NA in any type, or level numbers." +msgstr "" + +#: assign.c:766 +msgid "" +"Internal error: levels of target are either not unique or have truelength<0" +msgstr "" + +#: assign.c:805 +#, c-format +msgid "Unable to allocate working memory of %d bytes to combine factor levels" +msgstr "" + +#: assign.c:812 +msgid "Internal error: extra level check sum failed" +msgstr "" + +#: assign.c:831 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of the target column " +"(column %d named '%s')." +msgstr "" + +#: assign.c:837 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " +"column (column %d named '%s')." +msgstr "" + +#: assign.c:842 +#, c-format +msgid "" +"Coercing 'list' RHS to '%s' to match the type of the target column (column " +"%d named '%s')." +msgstr "" + +#: assign.c:848 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" +msgstr "" + +#: assign.c:943 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "" + +#: assign.c:1063 +msgid "" +"To assign integer64 to a character column, please use as.character() for " +"clarity." +msgstr "" + +#: assign.c:1074 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "" + +#: assign.c:1121 +#, c-format +msgid "Internal error: writeNA passed a vector of type '%s'" +msgstr "" + +#: assign.c:1152 +#, c-format +msgid "" +"Internal error: savetl_init checks failed (%d %d %p %p). please report to " +"data.table issue tracker." +msgstr "" + +#: assign.c:1160 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "" + +#: assign.c:1169 +#, c-format +msgid "" +"Internal error: reached maximum %d items for savetl. Please report to data." +"table issue tracker." +msgstr "" + +#: assign.c:1176 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "" + +#: assign.c:1182 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "" + +#: assign.c:1205 +msgid "x must be a character vector" +msgstr "" + +#: assign.c:1206 +msgid "'which' must be an integer vector" +msgstr "" + +#: assign.c:1207 +msgid "'new' must be a character vector" +msgstr "" + +#: assign.c:1208 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "" + +#: assign.c:1211 +#, c-format +msgid "" +"Item %d of 'which' is %d which is outside range of the length %d character " +"vector" +msgstr "" + +#: assign.c:1221 +msgid "dt passed to setcolorder has no names" +msgstr "" + +#: assign.c:1223 +#, c-format +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "" + +#: assign.c:1230 +msgid "" +"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" +msgstr "" + +#: assign.c:1232 +msgid "Internal error: o passed to Csetcolorder contains a duplicate" +msgstr "" + +#: between.c:12 +#, 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 "" + +#: between.c:16 +msgid "incbounds must be TRUE or FALSE" +msgstr "" + +#: between.c:19 +msgid "NAbounds must be TRUE or NA" +msgstr "" + +#: between.c:22 +msgid "check must be TRUE or FALSE" +msgstr "" + +#: between.c:64 +#, c-format +msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" +msgstr "" + +#: between.c:82 +#, c-format +msgid "between parallel processing of integer took %8.3fs\n" +msgstr "" + +#: between.c:88 +msgid "x is integer64 but lower and/or upper are not." +msgstr "" + +#: between.c:95 +#, c-format +msgid "Item %d of lower (%lld) is greater than item %d of upper (%lld)" +msgstr "" + +#: between.c:112 +#, c-format +msgid "between parallel processing of integer64 took %8.3fs\n" +msgstr "" + +#: between.c:115 +msgid "" +"x is not integer64 but lower and/or upper is integer64. Please align classes." +msgstr "" + +#: between.c:122 +#, c-format +msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" +msgstr "" + +#: between.c:140 +#, c-format +msgid "between parallel processing of double with open bounds took %8.3fs\n" +msgstr "" + +#: between.c:157 +#, c-format +msgid "between parallel processing of double with closed bounds took %8.3fs\n" +msgstr "" + +#: between.c:172 +#, c-format +msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" +msgstr "" + +#: between.c:187 +#, c-format +msgid "between non-parallel processing of character took %8.3fs\n" +msgstr "" + +#: between.c:190 +#, c-format +msgid "" +"Internal error: between.c unsupported type '%s' should have been caught at R " +"level" +msgstr "" + +#: bmerge.c:48 +msgid "Internal error: icols is not integer vector" +msgstr "" + +#: bmerge.c:49 +msgid "Internal error: xcols is not integer vector" +msgstr "" + +#: bmerge.c:50 +#, c-format +msgid "Internal error: length(icols) [%d] > length(xcols) [%d]" +msgstr "" + +#: bmerge.c:57 +#, c-format +msgid "Internal error. icols[%d] is NA" +msgstr "" + +#: bmerge.c:58 +#, c-format +msgid "Internal error. xcols[%d] is NA" +msgstr "" + +#: bmerge.c:59 +#, c-format +msgid "icols[%d]=%d outside range [1,length(i)=%d]" +msgstr "" + +#: bmerge.c:60 +#, c-format +msgid "xcols[%d]=%d outside range [1,length(x)=%d]" +msgstr "" + +#: bmerge.c:63 +#, c-format +msgid "typeof x.%s (%s) != typeof i.%s (%s)" +msgstr "" + +#: bmerge.c:70 +msgid "roll is character but not 'nearest'" +msgstr "" + +#: bmerge.c:71 +msgid "roll='nearest' can't be applied to a character column, yet." +msgstr "" + +#: bmerge.c:74 +msgid "Internal error: roll is not character or double" +msgstr "" + +#: bmerge.c:79 +msgid "rollends must be a length 2 logical vector" +msgstr "" + +#: bmerge.c:89 uniqlist.c:270 +msgid "" +"Internal error: invalid value for 'mult'. please report to data.table issue " +"tracker" +msgstr "" + +#: bmerge.c:93 +msgid "" +"Internal error: opArg is not an integer vector of length equal to length(on)" +msgstr "" + +#: bmerge.c:96 +msgid "Internal error: nqgrpArg must be an integer vector" +msgstr "" + +#: bmerge.c:102 +msgid "Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector" +msgstr "" + +#: bmerge.c:111 +msgid "Internal error in allocating memory for non-equi join" +msgstr "" + +#: bmerge.c:156 +msgid "Internal error: xoArg is not an integer vector" +msgstr "" + +#: bmerge.c:271 bmerge.c:379 +#, c-format +msgid "" +"Internal error in bmerge_r for '%s' column. Unrecognized value op[col]=%d" +msgstr "" + +#: bmerge.c:303 +#, c-format +msgid "Only '==' operator is supported for columns of type %s." +msgstr "" + +#: bmerge.c:410 +#, c-format +msgid "Type '%s' not supported for joining/merging" +msgstr "" + +#: bmerge.c:468 +msgid "Internal error: xlow!=xupp-1 || xlowxuppIn" +msgstr "" + +#: chmatch.c:4 +#, c-format +msgid "x is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:5 +#, c-format +msgid "table is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:6 +msgid "Internal error: either chin or chmatchdup should be true not both" +msgstr "" + +#: chmatch.c:30 +#, c-format +msgid "" +"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " +"issue on the data.table tracker." +msgstr "" + +#: chmatch.c:60 +#, c-format +msgid "" +"Failed to allocate %lld bytes working memory in chmatchdup: length(table)=%d " +"length(unique(table))=%d" +msgstr "" + +#: cj.c:89 +#, c-format +msgid "Type '%s' not supported by CJ." +msgstr "" + +#: coalesce.c:5 +msgid "Internal error in coalesce.c: input is list(...) at R level" +msgstr "" + +#: coalesce.c:7 +msgid "" +"Internal error in coalesce.c: argument 'inplaceArg' must be TRUE or FALSE" +msgstr "" + +#: coalesce.c:16 +msgid "" +"The first argument is a list, data.table or data.frame. In this case there " +"should be no other arguments provided." +msgstr "" + +#: coalesce.c:32 +#, 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 "" + +#: coalesce.c:34 +#, c-format +msgid "" +"Item %d is a factor but its levels are not identical to the first item's " +"levels." +msgstr "" + +#: coalesce.c:38 +#, 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 "" + +#: coalesce.c:41 +#, c-format +msgid "" +"Item %d is type %s but the first item is type %s. Please coerce before " +"coalescing." +msgstr "" + +#: coalesce.c:43 +#, c-format +msgid "Item %d has a different class than item 1." +msgstr "" + +#: coalesce.c:46 +#, c-format +msgid "" +"Item %d is length %d but the first item is length %d. Only singletons are " +"recycled." +msgstr "" + +#: coalesce.c:50 +msgid "coalesce copied first item (inplace=FALSE)\n" +msgstr "" + +#: coalesce.c:166 +#, c-format +msgid "Unsupported type: %s" +msgstr "" + +#: dogroups.c:14 +msgid "Internal error: order not integer vector" +msgstr "" + +#: dogroups.c:15 +msgid "Internal error: starts not integer" +msgstr "" + +#: dogroups.c:16 +msgid "Internal error: lens not integer" +msgstr "" + +#: dogroups.c:18 +msgid "Internal error: jiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:19 +msgid "Internal error: xjiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:20 +msgid "'env' should be an environment" +msgstr "" + +#: dogroups.c:39 +#, c-format +msgid "" +"Internal error: unsupported size-0 type '%s' in column %d of 'by' should " +"have been caught earlier" +msgstr "" + +#: dogroups.c:43 +#, c-format +msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" +msgstr "" + +#: dogroups.c:62 +msgid "row.names attribute of .SD not found" +msgstr "" + +#: dogroups.c:64 +#, 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 "" + +#: dogroups.c:69 +msgid "length(names)!=length(SD)" +msgstr "" + +#: dogroups.c:73 +#, c-format +msgid "" +"Internal error: size-0 type %d in .SD column %d should have been caught " +"earlier" +msgstr "" + +#: dogroups.c:83 +msgid "length(xknames)!=length(xSD)" +msgstr "" + +#: dogroups.c:87 +#, c-format +msgid "" +"Internal error: type %d in .xSD column %d should have been caught by now" +msgstr "" + +#: dogroups.c:91 +#, c-format +msgid "length(iSD)[%d] != length(jiscols)[%d]" +msgstr "" + +#: dogroups.c:92 +#, c-format +msgid "length(xSD)[%d] != length(xjiscols)[%d]" +msgstr "" + +#: dogroups.c:155 dogroups.c:184 +msgid "Internal error. Type of column should have been checked by now" +msgstr "" + +#: dogroups.c:273 +#, c-format +msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." +msgstr "" + +#: dogroups.c:281 +msgid "" +"All items in j=list(...) should be atomic vectors or lists. 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 "" + +#: dogroups.c:291 +msgid "" +"RHS is NULL when grouping :=. Makes no sense to delete a column by group. " +"Perhaps use an empty vector instead." +msgstr "" + +#: dogroups.c:295 +#, 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 "" + +#: dogroups.c:304 +msgid "" +"Internal error: Trying to add new column by reference but tl is full; " +"setalloccol should have run first at R level before getting to this point in " +"dogroups" +msgstr "" + +#: dogroups.c:319 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "" + +#: dogroups.c:326 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "" + +#: dogroups.c:360 +#, 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 "" + +#: dogroups.c:363 +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 "" + +#: dogroups.c:365 +#, 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 "" + +#: dogroups.c:373 +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 "" + +#: dogroups.c:385 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "" + +#: dogroups.c:386 +#, c-format +msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +msgstr "" + +#: dogroups.c:419 +#, 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 "" + +#: dogroups.c:426 +#, 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 "" + +#: dogroups.c:428 +#, 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 "" + +#: dogroups.c:443 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "" + +#: dogroups.c:453 +#, c-format +msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" +msgstr "" + +#: dogroups.c:455 +#, c-format +msgid "" +"\n" +" %s took %.3fs for %d groups\n" +msgstr "" + +#: dogroups.c:457 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr "" + +#: dogroups.c:481 +msgid "growVector passed NULL" +msgstr "" + +#: fastmean.c:39 +msgid "narm should be TRUE or FALSE" +msgstr "" + +#: fastmean.c:45 +#, c-format +msgid "fastmean was passed type %s, not numeric or logical" +msgstr "" + +#: fastmean.c:83 fastmean.c:111 +#, c-format +msgid "Internal error: type '%s' not caught earlier in fastmean" +msgstr "" + +#: fcast.c:80 +#, c-format +msgid "Unsupported column type in fcast val: '%s'" +msgstr "" + +#: fifelse.c:5 +msgid "Argument 'test' must be logical." +msgstr "" + +#: fifelse.c:23 +#, c-format +msgid "" +"'yes' is of type %s but 'no' is of type %s. Please make sure that both " +"arguments have the same type." +msgstr "" + +#: fifelse.c:28 +msgid "" +"'yes' has different class than 'no'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:33 +msgid "'yes' and 'no' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:38 +#, c-format +msgid "Length of 'yes' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:40 +#, c-format +msgid "Length of 'no' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:51 +#, c-format +msgid "Length of 'na' is %lld but must be 1" +msgstr "" + +#: fifelse.c:57 +#, c-format +msgid "" +"'yes' is of type %s but 'na' is of type %s. Please make sure that both " +"arguments have the same type." +msgstr "" + +#: fifelse.c:59 +msgid "" +"'yes' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:63 +msgid "'yes' and 'na' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:133 +#, c-format +msgid "Type %s is not supported." +msgstr "" + +#: fmelt.c:18 +msgid "'x' must be an integer" +msgstr "" + +#: fmelt.c:19 +msgid "'n' must be a positive integer" +msgstr "" + +#: fmelt.c:41 +msgid "Argument to 'which' must be logical" +msgstr "" + +#: fmelt.c:70 +msgid "concat: 'vec must be a character vector" +msgstr "" + +#: fmelt.c:71 +msgid "concat: 'idx' must be an integer vector of length >= 0" +msgstr "" + +#: fmelt.c:75 +msgid "" +"concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= " +"length(vec)" +msgstr "" + +#: fmelt.c:102 +#, c-format +msgid "Unknown 'measure.vars' type %s at index %d of list" +msgstr "" + +#: fmelt.c:148 +#, 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 "" + +#: fmelt.c:154 fmelt.c:219 +#, c-format +msgid "Unknown 'id.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:159 fmelt.c:223 +msgid "One or more values in 'id.vars' is invalid." +msgstr "" + +#: fmelt.c:175 +msgid "" +"'measure.vars' is missing. Assigning all columns other than 'id.vars' " +"columns as 'measure.vars'.\n" +msgstr "" + +#: fmelt.c:176 +#, c-format +msgid "Assigned 'measure.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:184 +#, c-format +msgid "" +"Unknown 'measure.vars' type %s, must be character or integer vector/list" +msgstr "" + +#: fmelt.c:193 fmelt.c:239 +msgid "One or more values in 'measure.vars' is invalid." +msgstr "" + +#: fmelt.c:211 +msgid "" +"'id.vars' is missing. Assigning all columns other than 'measure.vars' " +"columns as 'id.vars'.\n" +msgstr "" + +#: fmelt.c:212 +#, c-format +msgid "Assigned 'id.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:231 +#, c-format +msgid "Unknown 'measure.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:276 +msgid "" +"When 'measure.vars' is a list, 'value.name' must be a character vector of " +"length =1 or =length(measure.vars)." +msgstr "" + +#: fmelt.c:277 +msgid "" +"When 'measure.vars' is either not specified or a character/integer vector, " +"'value.name' must be a character vector of length =1." +msgstr "" + +#: fmelt.c:280 +msgid "'variable.name' must be a character/integer vector of length=1." +msgstr "" + +#: fmelt.c:329 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects all-character input" +msgstr "" + +#: fmelt.c:332 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects a character target to " +"factorize" +msgstr "" + +#: fmelt.c:385 +#, 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 "" + +#: fmelt.c:387 +#, c-format +msgid "" +"The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n" +msgstr "" + +#: fmelt.c:490 +#, c-format +msgid "Unknown column type '%s' for column '%s'." +msgstr "" + +#: fmelt.c:514 +#, c-format +msgid "Internal error: fmelt.c:getvarcols %d %d" +msgstr "" + +#: fmelt.c:662 +#, c-format +msgid "Unknown column type '%s' for column '%s' in 'data'" +msgstr "" + +#: fmelt.c:673 +msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" +msgstr "" + +#: fmelt.c:674 +msgid "Argument 'value.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:675 +msgid "Argument 'variable.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:676 +msgid "Argument 'na.rm' should be logical TRUE/FALSE." +msgstr "" + +#: fmelt.c:677 +msgid "Argument 'variable.name' must be a character vector" +msgstr "" + +#: fmelt.c:678 +msgid "Argument 'value.name' must be a character vector" +msgstr "" + +#: fmelt.c:679 +msgid "Argument 'verbose' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:682 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "" + +#: fmelt.c:687 +msgid "names(data) is NULL. Please report to data.table-help" +msgstr "" + +#: forder.c:106 +#, c-format +msgid "Failed to realloc thread private group size buffer to %d*4bytes" +msgstr "" + +#: forder.c:120 +#, c-format +msgid "Failed to realloc group size result to %d*4bytes" +msgstr "" + +#: forder.c:263 +#, c-format +msgid "" +"Logical error. counts[0]=%d in cradix but should have been decremented to 0. " +"radix=%d" +msgstr "" + +#: forder.c:278 +msgid "Failed to alloc cradix_counts" +msgstr "" + +#: forder.c:280 +msgid "Failed to alloc cradix_tmp" +msgstr "" + +#: forder.c:291 +#, c-format +msgid "" +"Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " +"ustr_alloc=%d" +msgstr "" + +#: forder.c:292 +msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" +msgstr "" + +#: forder.c:312 +#, c-format +msgid "Unable to realloc %d * %d bytes in range_str" +msgstr "" + +#: forder.c:330 +msgid "Failed to alloc ustr3 when converting strings to UTF8" +msgstr "" + +#: forder.c:348 +msgid "Failed to alloc tl when converting strings to UTF8" +msgstr "" + +#: forder.c:377 +msgid "Must an integer or numeric vector length 1" +msgstr "" + +#: forder.c:378 +msgid "Must be 2, 1 or 0" +msgstr "" + +#: forder.c:412 +msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" +msgstr "" + +#: forder.c:434 +msgid "" +"Internal error: input is not either a list of columns, or an atomic vector." +msgstr "" + +#: forder.c:436 +msgid "" +"Internal error: input is an atomic vector (not a list of columns) but by= is " +"not NULL" +msgstr "" + +#: forder.c:438 +msgid "" +"Input is an atomic vector (not a list of columns) but order= is not a length " +"1 integer" +msgstr "" + +#: forder.c:440 +#, c-format +msgid "forder.c received a vector type '%s' length %d\n" +msgstr "" + +#: forder.c:448 +#, c-format +msgid "forder.c received %d rows and %d columns\n" +msgstr "" + +#: forder.c:451 +msgid "Internal error: DT is an empty list() of 0 columns" +msgstr "" + +#: forder.c:453 +#, c-format +msgid "" +"Internal error: DT has %d columns but 'by' is either not integer or is " +"length 0" +msgstr "" + +#: forder.c:455 +#, c-format +msgid "" +"Either order= is not integer or its length (%d) is different to by='s length " +"(%d)" +msgstr "" + +#: forder.c:461 +#, c-format +msgid "internal error: 'by' value %d out of range [1,%d]" +msgstr "" + +#: forder.c:463 +#, c-format +msgid "Column %d is length %d which differs from length of column 1 (%d)\n" +msgstr "" + +#: forder.c:467 +msgid "retGrp must be TRUE or FALSE" +msgstr "" + +#: forder.c:470 +msgid "sort must be TRUE or FALSE" +msgstr "" + +#: forder.c:473 +msgid "At least one of retGrp= or sort= must be TRUE" +msgstr "" + +#: forder.c:475 +msgid "na.last must be logical TRUE, FALSE or NA of length 1" +msgstr "" + +#: forder.c:519 +#, c-format +msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." +msgstr "" + +#: forder.c:545 +#, 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 "" + +#: forder.c:561 +#, c-format +msgid "Column %d passed to [f]order is type '%s', not yet supported." +msgstr "" + +#: forder.c:714 +msgid "Internal error: column not supported not caught earlier" +msgstr "" + +#: forder.c:722 +#, c-format +msgid "nradix=%d\n" +msgstr "" + +#: forder.c:728 +#, c-format +msgid "" +"Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" +msgstr "" + +#: forder.c:733 +msgid "Could not allocate (very tiny) group size thread buffers" +msgstr "" + +#: forder.c:794 +#, c-format +msgid "Timing block %2d%s = %8.3f %8d\n" +msgstr "" + +#: forder.c:797 +#, c-format +msgid "stat[%03d]==%10zd\n" +msgstr "" + +#: forder.c:1053 +#, c-format +msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" +msgstr "" + +#: forder.c:1162 +#, c-format +msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" +msgstr "" + +#: forder.c:1270 +msgid "" +"is.sorted (R level) and fsorted (C level) only to be used on vectors. If " +"needed on a list/data.table, you'll need the order anyway if not sorted, so " +"use if (length(o<-forder(...))) for efficiency in one step, or equivalent at " +"C level" +msgstr "" + +#: forder.c:1302 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "" + +#: forder.c:1311 +msgid "x must be either NULL or an integer vector" +msgstr "" + +#: forder.c:1313 +msgid "nrow must be integer vector length 1" +msgstr "" + +#: forder.c:1315 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "" + +#: forder.c:1332 +msgid "x must be type 'double'" +msgstr "" + +#: frank.c:11 +#, c-format +msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" +msgstr "" + +#: frank.c:12 +#, c-format +msgid "Internal error. Argument 'cols' to Cdt_na is type '%s' not 'integer'" +msgstr "" + +#: frank.c:16 frank.c:146 subset.c:263 +#, c-format +msgid "Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]" +msgstr "" + +#: frank.c:26 frank.c:155 +#, c-format +msgid "" +"Column %d of input list x is length %d, inconsistent with first column of " +"that item which is length %d." +msgstr "" + +#: frank.c:65 frank.c:202 transpose.c:88 +#, c-format +msgid "Unsupported column type '%s'" +msgstr "" + +#: frank.c:83 +msgid "" +"Internal error: invalid ties.method for frankv(), should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: frank.c:130 +#, c-format +msgid "Internal error: unknown ties value in frank: %d" +msgstr "" + +#: frank.c:141 +#, c-format +msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" +msgstr "" + +#: frank.c:142 +#, c-format +msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" +msgstr "" + +#: fread.c:149 +#, c-format +msgid "System error %d unmapping view of file\n" +msgstr "" + +#: fread.c:152 +#, c-format +msgid "System errno %d unmapping file: %s\n" +msgstr "" + +#: fread.c:212 +#, c-format +msgid "Internal error: NUMTYPE(%d) > nLetters(%d)" +msgstr "" + +#: fread.c:437 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM. %s allocation." +msgstr "" + +#: fread.c:442 +#, c-format +msgid "Avoidable %.3f seconds. %s time to copy.\n" +msgstr "" + +#: fread.c:443 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr "" + +#: fread.c:1095 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "" + +#: fread.c:1098 +msgid "[01] Check arguments\n" +msgstr "" + +#: fread.c:1105 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr "" + +#: fread.c:1113 +msgid "" +"Internal error: NAstrings is itself NULL. When empty it should be pointer to " +"NULL." +msgstr "" + +#: fread.c:1131 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "" + +#: fread.c:1136 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "" + +#: fread.c:1146 +msgid " No NAstrings provided.\n" +msgstr "" + +#: fread.c:1148 +msgid " NAstrings = [" +msgstr "" + +#: fread.c:1151 +msgid "]\n" +msgstr "" + +#: fread.c:1153 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr "" + +#: fread.c:1155 +msgid " None of the NAstrings look like numbers.\n" +msgstr "" + +#: fread.c:1157 +#, c-format +msgid " skip num lines = %llu\n" +msgstr "" + +#: fread.c:1158 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr "" + +#: fread.c:1159 +#, c-format +msgid " show progress = %d\n" +msgstr "" + +#: fread.c:1160 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr "" + +#: fread.c:1168 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "" + +#: fread.c:1169 +msgid "dec='' not allowed. Should be '.' or ','" +msgstr "" + +#: fread.c:1170 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1171 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1188 +msgid "[02] Opening the file\n" +msgstr "" + +#: fread.c:1191 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "" + +#: fread.c:1195 +msgid "Internal error: last byte of character input isn't \\0" +msgstr "" + +#: fread.c:1198 +#, c-format +msgid " Opening file %s\n" +msgstr "" + +#: fread.c:1202 +#, c-format +msgid "file not found: %s" +msgstr "" + +#: fread.c:1206 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "" + +#: fread.c:1209 fread.c:1237 +#, c-format +msgid "File is empty: %s" +msgstr "" + +#: fread.c:1210 fread.c:1238 +#, c-format +msgid " File opened, size = %s.\n" +msgstr "" + +#: fread.c:1227 +#, c-format +msgid "File not found: %s" +msgstr "" + +#: fread.c:1233 +#, c-format +msgid "Unable to open file after %d attempts (error %d): %s" +msgstr "" + +#: fread.c:1235 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "" + +#: fread.c:1240 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %d for file %s" +msgstr "" + +#: fread.c:1247 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "" + +#: fread.c:1248 +msgid "Please upgrade to 64bit" +msgstr "" + +#: fread.c:1248 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "" + +#: fread.c:1251 +msgid " Memory mapped ok\n" +msgstr "" + +#: fread.c:1253 +msgid "" +"Internal error: Neither `input` nor `filename` are given, nothing to read." +msgstr "" + +#: fread.c:1270 +msgid "[03] Detect and skip BOM\n" +msgstr "" + +#: fread.c:1274 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "" + +#: fread.c:1279 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "" + +#: fread.c:1282 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "" + +#: fread.c:1287 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr "" + +#: fread.c:1290 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "" + +#: fread.c:1297 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "" + +#: fread.c:1304 +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 "" + +#: fread.c:1305 +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 "" + +#: fread.c:1329 +#, 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 "" + +#: fread.c:1336 +#, c-format +msgid " File ends abruptly with '%c'. Copying file in RAM. %s copy.\n" +msgstr "" + +#: fread.c:1370 +msgid "[05] Skipping initial rows if needed\n" +msgstr "" + +#: fread.c:1376 +#, c-format +msgid "" +"skip='%s' not found in input (it is case sensitive and literal; i.e., no " +"patterns, wildcards or regex)" +msgstr "" + +#: fread.c:1382 +#, c-format +msgid "" +"Found skip='%s' on line %llu. Taking this to be header row or first row of " +"data.\n" +msgstr "" + +#: fread.c:1395 +#, c-format +msgid " Skipped to line %llu in the file" +msgstr "" + +#: fread.c:1396 +#, c-format +msgid "skip=%llu but the input only has %llu line%s" +msgstr "" + +#: fread.c:1405 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "" + +#: fread.c:1407 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr "" + +#: fread.c:1408 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr "" + +#: fread.c:1426 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "" + +#: fread.c:1430 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr "" + +#: fread.c:1449 +msgid " Detecting sep automatically ...\n" +msgstr "" + +#: fread.c:1456 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr "" + +#: fread.c:1490 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1540 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1547 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr "" + +#: fread.c:1563 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "" + +#: fread.c:1568 +#, 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 "" + +#: fread.c:1584 +#, c-format +msgid "" +"Internal error: ncol==%d line==%d after detecting sep, ncol and first line" +msgstr "" + +#: fread.c:1587 +#, c-format +msgid "Internal error: first line has field count %d but expecting %d" +msgstr "" + +#: fread.c:1589 +#, 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 "" + +#: fread.c:1591 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr "" + +#: fread.c:1592 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr "" + +#: fread.c:1598 +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 is a multiple of 4096, too." +msgstr "" + +#: fread.c:1599 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr "" + +#: fread.c:1605 +msgid "" +" 1-column file ends with 2 or more end-of-line. Restoring last eol using " +"extra byte in cow page.\n" +msgstr "" + +#: fread.c:1624 +msgid "" +"[07] Detect column types, good nrow estimate and whether first row is column " +"names\n" +msgstr "" + +#: fread.c:1625 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr "" + +#: fread.c:1629 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1650 +#, c-format +msgid " Number of sampling jump points = %d because " +msgstr "" + +#: fread.c:1651 +#, c-format +msgid "nrow limit (%llu) supplied\n" +msgstr "" + +#: fread.c:1652 +msgid "jump0size==0\n" +msgstr "" + +#: fread.c:1653 +#, c-format +msgid "(%llu bytes from row 1 to eof) / (2 * %llu jump0size) == %llu\n" +msgstr "" + +#: fread.c:1691 +#, c-format +msgid "" +" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. " +"%s\n" +msgstr "" + +#: fread.c:1718 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1731 +#, 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 %d sample rows\n" +msgstr "" + +#: fread.c:1743 +msgid "" +"Internal error: row before first data row has the same number of fields but " +"we're not using it." +msgstr "" + +#: fread.c:1744 +msgid "" +"Internal error: ch!=pos after counting fields in the line before the first " +"data row." +msgstr "" + +#: fread.c:1745 +#, 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 "" + +#: fread.c:1748 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns (i.e. invalid file). " +"Added %d extra default column name%s\n" +msgstr "" + +#: fread.c:1751 +msgid "" +"Internal error: fill=true but there is a previous row which should already " +"have been filled." +msgstr "" + +#: fread.c:1752 +#, 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 "" + +#: fread.c:1756 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1776 +#, c-format +msgid "" +" 'header' determined to be %s because there are%s number fields in the " +"first and only row\n" +msgstr "" + +#: fread.c:1779 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "" + +#: fread.c:1781 +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 "" + +#: fread.c:1797 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1806 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=%llu exactly\n" +msgstr "" + +#: fread.c:1818 fread.c:1825 +msgid " =====\n" +msgstr "" + +#: fread.c:1819 +#, c-format +msgid "" +" Sampled %llu rows (handled \\n inside quoted fields) at %d jump points\n" +msgstr "" + +#: fread.c:1820 +#, c-format +msgid " Bytes from first data row on line %d to the end of last row: %llu\n" +msgstr "" + +#: fread.c:1821 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "" + +#: fread.c:1822 +#, c-format +msgid " Estimated number of rows: %llu / %.2f = %llu\n" +msgstr "" + +#: fread.c:1823 +#, c-format +msgid "" +" Initial alloc = %llu rows (%llu + %d%%) using bytes/max(mean-2*sd,min) " +"clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" + +#: fread.c:1827 +#, c-format +msgid "Internal error: sampleLines(%llu) > allocnrow(%llu)" +msgstr "" + +#: fread.c:1831 +#, c-format +msgid " Alloc limited to lower nrows=%llu passed in.\n" +msgstr "" + +#: fread.c:1843 +msgid "[08] Assign column names\n" +msgstr "" + +#: fread.c:1851 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "" + +#: fread.c:1873 +#, c-format +msgid "Internal error: reading colnames ending on '%c'" +msgstr "" + +#: fread.c:1891 +msgid "[09] Apply user overrides on column types\n" +msgstr "" + +#: fread.c:1895 +msgid " Cancelled by user: userOverride() returned false." +msgstr "" + +#: fread.c:1905 +#, c-format +msgid "Failed to allocate %d bytes for size array: %s" +msgstr "" + +#: fread.c:1912 +#, c-format +msgid "" +"Attempt to override column %d <<%.*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 "" + +#: fread.c:1926 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr "" + +#: fread.c:1934 +msgid "[10] Allocate memory for the datatable\n" +msgstr "" + +#: fread.c:1935 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with %llu rows\n" +msgstr "" + +#: fread.c:1989 +#, c-format +msgid "Buffer size %lld is too large\n" +msgstr "" + +#: fread.c:1992 +msgid "[11] Read the data\n" +msgstr "" + +#: fread.c:1995 +#, c-format +msgid " jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n" +msgstr "" + +#: fread.c:2215 +#, c-format +msgid "" +"Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n" +msgstr "" + +#: fread.c:2337 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) " +"and continue reading from jump %d\n" +msgstr "" + +#: fread.c:2344 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr "" + +#: fread.c:2364 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr "" + +#: fread.c:2400 +#, c-format +msgid "" +"Read %llu rows x %d columns from %s file in %02d:%06.3f wall clock time\n" +msgstr "" + +#: fread.c:2407 +msgid "[12] Finalizing the datatable\n" +msgstr "" + +#: fread.c:2408 +msgid " Type counts:\n" +msgstr "" + +#: fread.c:2410 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "" + +#: fread.c:2426 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "" + +#: fread.c:2431 +#, c-format +msgid "" +"Stopped early on line %llu. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" + +#: fread.c:2437 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line %llu: <<" +"%s>>. If the fields are not quoted (e.g. field separator does not appear " +"within any field), try quote=\"\" to avoid this warning." +msgstr "" + +#: fread.c:2441 +msgid "=============================\n" +msgstr "" + +#: fread.c:2443 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "" + +#: fread.c:2444 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "" + +#: fread.c:2446 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr "" + +#: fread.c:2447 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using %llu sample rows\n" +msgstr "" + +#: fread.c:2449 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of %llu rows x %d cols (%.3fGB) of which %llu " +"(%3.0f%%) rows used\n" +msgstr "" + +#: fread.c:2453 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) " +"using %d threads\n" +msgstr "" + +#: fread.c:2455 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr "" + +#: fread.c:2456 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr "" + +#: fread.c:2457 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr "" + +#: fread.c:2458 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "" + +#: fread.c:2460 +#, c-format +msgid "%8.3fs Total\n" +msgstr "" + +#: freadR.c:84 +msgid "" +"Internal error: freadR input not a single character string: a filename or " +"the data itself. Should have been caught at R level." +msgstr "" + +#: freadR.c:92 +msgid "" +"Input contains a \\n or is \")\". Taking this to be text input (not a " +"filename)\n" +msgstr "" + +#: freadR.c:95 +msgid "Input contains no \\n. Taking this to be a filename to open\n" +msgstr "" + +#: freadR.c:101 +msgid "" +"Internal error: freadR sep not a single character. R level catches this." +msgstr "" + +#: freadR.c:105 +msgid "" +"Internal error: freadR dec not a single character. R level catches this." +msgstr "" + +#: freadR.c:112 +msgid "quote= must be a single character, blank \"\", or FALSE" +msgstr "" + +#: freadR.c:137 +msgid "Internal error: skip not integer or string in freadR.c" +msgstr "" + +#: freadR.c:140 +#, c-format +msgid "Internal error: NAstringsArg is type '%s'. R level catches this" +msgstr "" + +#: freadR.c:153 +#, c-format +msgid "nThread(%d)<1" +msgstr "" + +#: freadR.c:160 +msgid "'integer64' must be a single character string" +msgstr "" + +#: freadR.c:168 +#, c-format +msgid "" +"Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or " +"'numeric'" +msgstr "" + +#: freadR.c:176 +msgid "Use either select= or drop= but not both." +msgstr "" + +#: freadR.c:179 +msgid "" +"select= is type list for specifying types in select=, but colClasses= has " +"been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:181 +msgid "" +"select= is type list but has no names; expecting list(type1=cols1, " +"type2=cols2, ...)" +msgstr "" + +#: freadR.c:188 +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 "" + +#: freadR.c:196 freadR.c:346 +msgid "colClasses is type list but has no names" +msgstr "" + +#: freadR.c:206 +#, c-format +msgid "encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'" +msgstr "" + +#: freadR.c:229 +#, c-format +msgid "Column name '%s' (%s) not found" +msgstr "" + +#: freadR.c:231 +#, c-format +msgid "%s is NA" +msgstr "" + +#: freadR.c:233 +#, c-format +msgid "%s is %d which is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:247 +msgid "Internal error: typeSize[CT_BOOL8_N] != 1" +msgstr "" + +#: freadR.c:248 +msgid "Internal error: typeSize[CT_STRING] != 1" +msgstr "" + +#: freadR.c:282 +#, c-format +msgid "" +"Column name '%s' not found in column name header (case sensitive), skipping." +msgstr "" + +#: freadR.c:292 +#, 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 "" + +#: freadR.c:293 +#, c-format +msgid "" +"select = 0 (select[%d]) has no meaning. All values of select should be in " +"the range [1,ncol=%d]." +msgstr "" + +#: freadR.c:294 +#, c-format +msgid "" +"Column number %d (select[%d]) is too large for this table, which only has %d " +"columns." +msgstr "" + +#: freadR.c:295 +#, c-format +msgid "Column number %d ('%s') has been selected twice by select=" +msgstr "" + +#: freadR.c:313 +msgid "" +"colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing" +msgstr "" + +#: freadR.c:318 +#, 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 "" + +#: freadR.c:329 +msgid "Internal error: selectInts is NULL but selectColClasses is true" +msgstr "" + +#: freadR.c:330 +msgid "" +"Internal error: length(selectSxp)!=length(colClassesSxp) but " +"selectColClasses is true" +msgstr "" + +#: freadR.c:344 +#, c-format +msgid "colClasses is type '%s' but should be list or character" +msgstr "" + +#: freadR.c:368 +#, c-format +msgid "Column name '%s' (colClasses[[%d]][%d]) not found" +msgstr "" + +#: freadR.c:370 +#, c-format +msgid "colClasses[[%d]][%d] is NA" +msgstr "" + +#: freadR.c:374 +#, c-format +msgid "" +"Column %d ('%s') appears more than once in colClasses. The second time is " +"colClasses[[%d]][%d]." +msgstr "" + +#: freadR.c:381 +#, c-format +msgid "Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:583 +#, c-format +msgid "Field size is 1 but the field is of type %d\n" +msgstr "" + +#: freadR.c:592 +#, c-format +msgid "Internal error: unexpected field of size %d\n" +msgstr "" + +#: freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + +#: froll.c:18 froll.c:227 froll.c:411 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "" + +#: froll.c:36 froll.c:244 froll.c:460 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "" + +#: froll.c:43 froll.c:251 frolladaptive.c:23 frolladaptive.c:218 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "" + +#: froll.c:52 froll.c:255 +#, c-format +msgid "%s: running for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:72 froll.c:82 froll.c:173 froll.c:275 froll.c:285 froll.c:366 +#: frolladaptive.c:62 frolladaptive.c:151 frolladaptive.c:251 +#: frolladaptive.c:330 +#, 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 "" + +#: froll.c:75 froll.c:177 froll.c:278 froll.c:370 frolladaptive.c:65 +#: frolladaptive.c:155 frolladaptive.c:254 frolladaptive.c:334 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "" + +#: froll.c:85 froll.c:288 +#, 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 "" + +#: froll.c:141 froll.c:339 +#, c-format +msgid "" +"%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:179 froll.c:372 frolladaptive.c:157 frolladaptive.c:336 +#, 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 "" + +#: froll.c:428 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "" + +#: froll.c:435 +#, 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 "" + +#: froll.c:438 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "" + +#: froll.c:467 +#, c-format +msgid "%s: took %.3fs\n" +msgstr "" + +#: frollR.c:15 +msgid "x must be of type numeric or logical" +msgstr "" + +#: frollR.c:26 +msgid "x must be list, data.frame or data.table of numeric or logical types" +msgstr "" + +#: frollR.c:47 frollR.c:264 +msgid "n must be non 0 length" +msgstr "" + +#: frollR.c:50 +msgid "adaptive must be TRUE or FALSE" +msgstr "" + +#: frollR.c:58 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "" + +#: frollR.c:65 frollR.c:256 frollR.c:259 +msgid "n must be integer" +msgstr "" + +#: frollR.c:72 +msgid "n must be positive integer values (> 0)" +msgstr "" + +#: frollR.c:81 frollR.c:93 +msgid "n must be integer vector or list of integer vectors" +msgstr "" + +#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 +#: gsumm.c:1261 gsumm.c:1402 uniqlist.c:350 +msgid "na.rm must be TRUE or FALSE" +msgstr "" + +#: frollR.c:107 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "" + +#: frollR.c:109 +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 "" + +#: frollR.c:119 frollR.c:275 +msgid "" +"Internal error: invalid align argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:122 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "" + +#: frollR.c:126 frollR.c:297 types.c:64 +#, c-format +msgid "%s: allocating memory for results %dx%d\n" +msgstr "" + +#: frollR.c:135 +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 "" + +#: frollR.c:137 +msgid "" +"length of integer vector(s) provided as list to 'n' argument must be equal " +"to number of observations provided in 'x'" +msgstr "" + +#: frollR.c:151 +msgid "" +"Internal error: invalid fun argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "" + +#: frollR.c:169 frollR.c:292 +msgid "fill must be numeric" +msgstr "" + +#: frollR.c:185 +msgid "" +"Internal error: invalid algo argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:190 +#, c-format +msgid "Internal error: badaptive=%d but ik is not integer" +msgstr "" + +#: frollR.c:198 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), if product > 1 then entering parallel " +"execution\n" +msgstr "" + +#: frollR.c:200 +#, 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 "" + +#: frollR.c:219 +#, c-format +msgid "Internal error: Unknown sfun value in froll: %d" +msgstr "" + +#: frollR.c:227 frollR.c:328 +#, c-format +msgid "%s: processing of %d column(s) and %d window(s) took %.3fs\n" +msgstr "" + +#: frollR.c:238 +msgid "internal error: 'fun' must be a function" +msgstr "" + +#: frollR.c:240 +msgid "internal error: 'rho' should be an environment" +msgstr "" + +#: frolladaptive.c:33 frolladaptive.c:222 +#, c-format +msgid "%s: running for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: frolladaptive.c:39 frolladaptive.c:228 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "" + +#: frolladaptive.c:75 frolladaptive.c:264 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "" + +#: frolladaptive.c:118 frolladaptive.c:302 +#, c-format +msgid "%s: running in parallel for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: fsort.c:111 +msgid "x must be a vector of type 'double' currently" +msgstr "" + +#: fsort.c:122 +#, c-format +msgid "nth=%d, nBatch=%d\n" +msgstr "" + +#: fsort.c:156 +#, c-format +msgid "Range = [%g,%g]\n" +msgstr "·¶Î§=[%g,%g]\n" + +#: fsort.c:157 +msgid "Cannot yet handle negatives." +msgstr "ĿǰÎÞ·¨´¦Àí¸ºÖµ¡£" + +#: fsort.c:170 +#, c-format +msgid "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" +msgstr "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" + +#: fsort.c:173 +msgid "Unable to allocate working memory" +msgstr "ÎÞ·¨·ÖÅ乤×÷ÄÚ´æ" + +#: fsort.c:177 +#, c-format +msgid "" +"counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n" +msgstr "countsΪ%dMB (ÿ¸önBatchÖеÄ%dÒ³=%d, batchSize=%lld, lastBatchSize=%lld)\n" + +#: fsort.c:230 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +msgstr "ÄÚ²¿´íÎó£ºcounts[nBatch-1][MSBsize-1] ²»µÈÓÚ length(x)" + +#: fsort.c:246 +msgid "Top 5 MSB counts: " +msgstr "ǰ5¸öMSB counts£º" + +#: fsort.c:246 +#, c-format +msgid "%lld " +msgstr "%lld " + +#: fsort.c:246 fwrite.c:690 fwrite.c:947 +msgid "\n" +msgstr "\n" + +#: fsort.c:247 +#, c-format +msgid "Reduced MSBsize from %d to " +msgstr "MSBsize ´Ó %d ¼õÉÙµ½" + +#: fsort.c:251 +#, c-format +msgid "%d by excluding 0 and 1 counts\n" +msgstr "%d ͨ¹ýÅųý0ºÍ1µÄcounts\n" + +#: fsort.c:308 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" +msgstr "%d: %.3f (%4.1f%%)\n" + +#: fwrite.c:601 +#, c-format +msgid "buffMB=%d outside [1,1024]" +msgstr "buffMB=%d ÔÚ[1,1024]Ö®Íâ" + +#: fwrite.c:608 +#, c-format +msgid "" +"eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" +msgstr "eol±ØÐëÊÇ1»ò¸ü¶àµÄ×Ö½Ú£¨Í¨³£ÊÇeither\\n »ò \\r\\n£©µ«Êdz¤¶ÈΪ%d" + +#: fwrite.c:611 +msgid "Column writers: " +msgstr "Êý¾ÝдÈ룺 " + +#: fwrite.c:613 fwrite.c:615 fwrite.c:617 +#, c-format +msgid "%d " +msgstr "%d " + +#: fwrite.c:616 +msgid "... " +msgstr "... " + +#: fwrite.c:619 +#, c-format +msgid "" +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%lld args.ncol=%d " +"eolLen=%d\n" +msgstr "\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%lld args.ncol=%d " +"eolLen=%d\n" + +#: fwrite.c:652 +#, c-format +msgid "Internal error: type %d has no max length method implemented" +msgstr "ÄÚ²¿´íÎó£º" + +#: fwrite.c:659 +#, c-format +msgid "maxLineLen=%zd. Found in %.3fs\n" +msgstr "maxLineLen=%zd. ÔÚ%.3fsÖз¢ÏÖ\n" + +#: fwrite.c:679 +#, 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:680 +#, 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:688 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " +msgstr "ÕýÔÚдÈëbom (%s), yaml (%d characters) ºÍ column names (%s) ..." + +#: fwrite.c:701 +#, c-format +msgid "Unable to allocate %d MiB for header: %s" +msgstr "ÎÞ·¨Îªheader: %s·ÖÅä%d MiB" + +#: fwrite.c:729 fwrite.c:789 +msgid "Can't allocate gzip stream structure" +msgstr "ÎÞ·¨·ÖÅägzipµÄÁ÷½á¹¹" + +#: fwrite.c:735 +#, c-format +msgid "Unable to allocate %d MiB for zbuffer: %s" +msgstr "ÎÞ·¨Îªzbuffer: %s·ÖÅä%d MiB" + +#: fwrite.c:750 +#, c-format +msgid "Compress gzip error: %d" +msgstr "½âѹgzip´íÎó: %d" + +#: fwrite.c:751 fwrite.c:759 fwrite.c:953 +#, c-format +msgid "%s: '%s'" +msgstr "%s: '%s'" + +#: fwrite.c:756 +#, c-format +msgid "done in %.3fs\n" +msgstr "%.3fsÍê³É\n" + +#: fwrite.c:758 +msgid "No data rows present (nrow==0)\n" +msgstr "µ±Ç°Ã»ÓÐÊý¾ÝÐÐ(nrow==0)\n" + +#: fwrite.c:776 +#, c-format +msgid "" +"Writing %lld rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d)\n" +msgstr "ÕýÔÚ%dÐеÄÅú´¦ÀíÖÐдÈë%lldÐÐ(ÿ¸ö»º´æµÄ´óСΪ%dMB£¬showProgress=%d, nth=%d)\n)" + +#: fwrite.c:961 +#, c-format +msgid "zlib v%s deflate() returned error %d with z_stream.msg '%s'. %s\n" +msgstr "zlib v%s deflate()ʹÓÃ%d with z_stream.msg '%s'. %s·µ»ØÁË´íÎó\n" + +#: fwrite.c:962 +msgid "Please include the full output above in your data.table bug report." +msgstr "ÇëÔÚÄãµÄdata.table´íÎ󱨸æÖаüº¬ÉÏÃæÍêÕûµÄÊä³ö" + +#: fwrite.c:963 +msgid "" +"Please retry fwrite() with verbose=TRUE and include the full output with " +"your data.table bug report." +msgstr "ÇëʹÓÃverbose=TRUEÖØÊÔfwrite()£¬²¢½«ÍêÕûµÄÊä³ö°üº¬ÔÚÄãµÄdata.table´íÎ󱨸æÖÐ" + +#: fwriteR.c:41 +msgid "Internal error: col passed to getMaxCategLen is missing levels" +msgstr "ÄÚ²¿´íÎ󣺴«µÝ¸øgetMaxCateLenµÄcolÕýÔÚ¶ªÊ§¼¶±ð" + +#: fwriteR.c:75 +msgid "Internal error: getMaxListItemLen should have caught this up front." +msgstr "ÄÚ²¿´íÎó£ºgetMaxListItemLenÓ¦¸ÃÒѾ­Ô¤ÏÈץȡÁËÕâ¸ö" + +#: fwriteR.c:98 +#, c-format +msgid "" +"Row %d 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 "ÁбíÒ³ÐÐ%dµÄÀàÐÍÊÇ'%s' - ÉÐδʵʩ. fwrite()¿ÉÒÔдÈë" +"°üº¬Âß¼­ÀàÐÍÔ­×ÓÏòÁ¿ÏîÄ¿µÄÁбíÒ³£¬" +"ÕûÊý£¬ÕûÊý64£¬Ë«¾«¶È£¬¸´ÊýºÍ×Ö·û" + +#: fwriteR.c:103 +#, c-format +msgid "" +"Internal error: row %d of list column has no max length method implemented" +msgstr "ÄÚ²¿´íÎó£ºÁбíÒ³µÄ%dÐÐûÓÐʵÏÖ×î´ó³¤¶È·½·¨" + +#: fwriteR.c:170 +msgid "" +"fwrite must be passed an object of type list; e.g. data.frame, data.table" +msgstr "fwrite±ØÐë´«µÝÒ»¸öÀàÐÍΪÁбíµÄ¶ÔÏó£»±ÈÈçdata.frame, data.table" + +#: fwriteR.c:179 +msgid "fwrite was passed an empty list of no columns. Nothing to write." +msgstr "fwrite´«µÝÁËÒ»¸öûÓÐÁеĿÕÁбí. ûÓжÔÏó¿ÉÒÔдÈë" + +#: fwriteR.c:234 +#, c-format +msgid "Column %d's length (%d) is not the same as column 1's length (%d)" +msgstr "ÁÐ%dµÄ³¤¶È(%d)ºÍÁÐ1µÄ³¤¶È(%d)²»Ò»ÖÂ" + +#: fwriteR.c:237 +#, c-format +msgid "Column %d's type is '%s' - not yet implemented in fwrite." +msgstr "ÁÐ%dµÄÀàÐÍÊÇ'%s' - ÉÐδÔÚfwriteÖÐʵʩ" + +#: fwriteR.c:262 +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:266 +#, 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£¬×ֶν«±»ÒýÓÃ" + +#: fwriteR.c:270 +#, 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:43 +msgid "env is not an environment" +msgstr "env²»ÊÇ»·¾³" + +#: gsumm.c:45 +msgid "o is not an integer vector" +msgstr "" + +#: gsumm.c:46 +msgid "f is not an integer vector" +msgstr "f²»ÊÇÒ»¸öÕûÊýÏòÁ¿" + +#: gsumm.c:47 +msgid "l is not an integer vector" +msgstr "l ²»ÊÇÕûÊýÏòÁ¿" + +#: gsumm.c:56 +msgid "irowsArg is neither an integer vector nor NULL" +msgstr "irowsArg ¼È²»ÊÇÕûÊýÏòÁ¿Ò²²»ÊÇ NULL" + +#: gsumm.c:58 +#, c-format +msgid "length(f)=%d != length(l)=%d" +msgstr "" + +#: gsumm.c:66 +#, c-format +msgid "o has length %d but sum(l)=%d" +msgstr "o µÄ³¤¶ÈΪ %d£¬µ« sum(l) = %d" + +#: gsumm.c:69 +msgid "Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn" +msgstr "ÄÚ²¿´íÎó£ºo µÄ maxgrpn ÊôÐÔÓëÖØÐ¼ÆËãµÄ maxgrpn ²»Æ¥Åä" + +#: gsumm.c:89 +#, c-format +msgid "" +"Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " +"batchSize=%d lastBatchSize=%d\n" +msgstr "ÄÚ²¿´íÎó£ºnrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " +"batchSize=%d lastBatchSize=%d\n" + +#: gsumm.c:98 +#, c-format +msgid "gforce initial population of grp took %.3f\n" +msgstr "grp µÄ gforce ³õʼȺÌåÊýÕ¼ÁË %.3f\n " + +#: gsumm.c:116 +msgid "" +"Internal error: Failed to allocate counts or TMP when assigning g in gforce" +msgstr "ÄÚ²¿´íÎó£ºÔÚ gforce ÖÐΪ g ¸³ÖµÊ±£¬Î´Äܳɹ¦Îª counts »òÕß TMP ·ÖÅä¿Õ¼ä" + +#: gsumm.c:194 +#, c-format +msgid "gforce assign high and low took %.3f\n" +msgstr "gforce ·ÖÅä high ºÍ low ÓÃÁË %.3f\n" + +#: gsumm.c:200 +#, c-format +msgid "gforce eval took %.3f\n" +msgstr "gforce eval ÓÃÁË %.3f\n" + +#: gsumm.c:216 +msgid "gather took ... " +msgstr "gather ÓÃÁË ..." + +#: gsumm.c:334 +#, c-format +msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" +msgstr "gather ÒÑÖ§³Ö INTSXP£¬REALSXP ºÍ CPLXSXP£¬µ«²»Ö§³Ö '%s'" + +#: gsumm.c:336 gsumm.c:568 +#, c-format +msgid "%.3fs\n" +msgstr "" + +#: gsumm.c:345 +msgid "sum is not meaningful for factors." +msgstr "Òò×ӵĺÍûÓÐÒâÒå¡£" + +#: gsumm.c:349 +#, c-format +msgid "This gsum took (narm=%s) ... " +msgstr "gsum Õ¼ÓÃÁË (narm=%s) ..." + +#: gsumm.c:350 gsumm.c:606 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gsum" +msgstr "gsum ÖÐ nrow [%d] != length(x) [%d]" + +#: gsumm.c:404 +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 "ijÕûÊýÁзÖ×éÇóºÍµÄ½á¹ûÖУ¬" +"³öÏÖÁ˳¬¹ýÁËÕûÐÍ£¨interger£©ÊýÖµËùÔÊÐí×î´óÖµµÄÇé¿ö£¬" +"¹Ê½á¹û±»×Ô¶¯×ª»»ÎªÊýÖµÀàÐÍ£¨numeric£©" + +#: gsumm.c:565 +#, c-format +msgid "" +"Type '%s' not supported by GForce sum (gsum). Either add the prefix base::" +"sum(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "GForce ÇóºÍ£¨gsum£©²»Ö§³ÖÀàÐÍ '%s'¡£ÇëʹÓà base::sum(.) »òÕß" +"ÉèÖà options(datatable.optimize=1) ¹Ø±Õ GForce ÓÅ»¯" + +#: gsumm.c:578 +msgid "" +"GForce mean can only be applied to columns, not .SD or similar. Likely " +"you're looking for 'DT[,lapply(.SD,mean),by=,.SDcols=]'. See ?data.table." +msgstr "GForce Ç󯽾ùÖµ½öÊÊÓÃÓÚÁУ¬¶ø²»ÄÜÓÃÓÚ .SD »òÆäËü¡£" +"»òÐíÄãÔÚ²éÕÒ 'DT[,lapply(.SD,mean),by=,.SDcols=]'¡£²Î¼û ?data.table ¡£" + +#: gsumm.c:579 +msgid "mean is not meaningful for factors." +msgstr "Òò×ӵį½¾ùֵûÓÐÒâÒå" + +#: gsumm.c:599 +#, c-format +msgid "Internal error: gsum returned type '%s'. typeof(x) is '%s'" +msgstr "ÄÚ²¿´íÎó£ºgsum ·µ»ØµÄÀàÐÍÊÇ '%s'£¬¶ø typeof(x) µÄ½á¹ûÔòÊÇ '%s'" + +#: gsumm.c:609 +#, c-format +msgid "Unable to allocate %d * %d bytes for sum in gmean na.rm=TRUE" +msgstr "ÎÞ·¨Îª gmean na.rm=TRUE µÄ×ܺͣ¨sum£©·ÖÅä %d * %d ×Ö½Ú¿Õ¼ä" + +#: gsumm.c:612 +#, c-format +msgid "Unable to allocate %d * %d bytes for counts in gmean na.rm=TRUE" +msgstr "ÎÞ·¨Îª gmean na.rm=TRUE µÄ¼ÆÊý£¨counts£©·ÖÅä %d * %d ×Ö½Ú¿Õ¼ä" + +#: gsumm.c:638 +#, c-format +msgid "Unable to allocate %d * %d bytes for si in gmean na.rm=TRUE" +msgstr "ÎÞ·¨Îª gmean na.rm=TRUE µÄ si ·ÖÅä %d * %d ×Ö½Ú¿Õ¼ä" + +#: gsumm.c:650 +#, c-format +msgid "" +"Type '%s' not supported by GForce mean (gmean) na.rm=TRUE. Either add the " +"prefix base::mean(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "GForce Çó¾ùÖµ£¨gmean£©²»Ö§³ÖÀàÐÍ '%s'¡£ÇëʹÓà base::mean(.) »òÕß" +"ÉèÖà options(datatable.optimize=1) ¹Ø±Õ GForce ÓÅ»¯" + +#: gsumm.c:674 +msgid "Internal error: unsupported type at the end of gmean" +msgstr "ÄÚ²¿´íÎó£ºgmean ½áβ´¦´æÔÚ²»Ö§³ÖµÄÀàÐÍ" + +#: gsumm.c:687 +msgid "" +"GForce min can only be applied to columns, not .SD or similar. To find min " +"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£©½öÊÊÓÃÓÚÁУ¬¶ø²»ÄÜÓÃÓÚ .SD »òÆäËü¡£" +"ÒªÕÒµ½ÁбíÖУ¨Èç .SD£©ËùÓÐÔªËØµÄ×îСֵ£¬ÐëʹÓà base::min(.SD) »òÕß" +"ÉèÖà options(datatable.optimize=1) ¹Ø±Õ GForce ÓÅ»¯¡£" +"Äã¸üÏñÊÇÔÚ²éÕÒ 'DT[,lapply(.SD,min),by=,.SDcols=]'" + +#: gsumm.c:688 +msgid "min is not meaningful for factors." +msgstr "Òò×ÓµÄ×îСֵûÓÐÒâÒå¡£" + +#: gsumm.c:693 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmin" +msgstr "gmin ÖÐ nrow [%d] != length(x) [%d]" + +#: gsumm.c:717 gsumm.c:850 +msgid "" +"No non-missing values found in at least one group. Coercing to numeric type " +"and returning 'Inf' for such groups to be consistent with base" +msgstr "ÔÚÖÁÉÙÒ»¸ö·Ö×éÖÐûÓз¢ÏÖȱʧֵ¡£" +"ΪÁËÓë base ±£³ÖÒ»Ö£¬½«ÕâЩ×éÇ¿ÖÆ×ª»»ÎªÊýÖµÀàÐͲ¢·µ»Ø ¡®Inf¡¯¡£" + +#: gsumm.c:756 gsumm.c:891 +msgid "" +"No non-missing values found in at least one group. Returning 'NA' for such " +"groups to be consistent with base" +msgstr "ÔÚÖÁÉÙÒ»¸ö·Ö×éÖÐûÓз¢ÏÖȱʧֵ¡£" +"ΪÁËÓë base ±£³ÖÒ»Ö£¬ÕâЩ×齫·µ»Ø ¡®NA¡¯¡£" + +#: gsumm.c:783 +msgid "" +"No non-missing values found in at least one group. Returning 'Inf' for such " +"groups to be consistent with base" +msgstr "ÔÚÖÁÉÙÒ»¸ö·Ö×éÖÐûÓз¢ÏÖȱʧֵ¡£" +"ΪÁËÓë base ±£³ÖÒ»Ö£¬ÕâЩ×齫·µ»Ø ¡®Inf¡¯¡£" + + +#: gsumm.c:791 +msgid "Type 'complex' has no well-defined min" +msgstr "¸´Êý²»ÄܱȽϴóС£¬¹ÊûÓÐ×îСֵ" + +#: gsumm.c:794 +#, c-format +msgid "" +"Type '%s' not supported by GForce min (gmin). Either add the prefix base::" +"min(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" +"ÀàÐÍ'%s'²»Ö§³ÖÓ¦Óà GForce ×îСֵ£¨gmin£© ÓÅ»¯¡£Äã¿ÉÒÔÌí¼Óǰ׺ base::" +"min(.) »òÕßʹÓà options(datatable.optimize=1) ¹Ø±Õ GForce ÓÅ»¯" + +#: gsumm.c:806 +msgid "" +"GForce max can only be applied to columns, not .SD or similar. To find max " +"of all items in a list such as .SD, either add the prefix base::max(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,max),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:807 +msgid "max is not meaningful for factors." +msgstr "" + +#: gsumm.c:812 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmax" +msgstr "" + +#: gsumm.c:930 +msgid "" +"No non-missing values found in at least one group. Returning '-Inf' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:937 +msgid "Type 'complex' has no well-defined max" +msgstr "" + +#: gsumm.c:940 +#, c-format +msgid "" +"Type '%s' not supported by GForce max (gmax). Either add the prefix base::" +"max(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:951 +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 "" + +#: gsumm.c:952 +msgid "median is not meaningful for factors." +msgstr "" + +#: gsumm.c:955 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmedian" +msgstr "" + +#: gsumm.c:992 +#, c-format +msgid "" +"Type '%s' not supported by GForce median (gmedian). Either add the prefix " +"stats::median(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:1005 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gtail" +msgstr "" + +#: gsumm.c:1073 +#, c-format +msgid "" +"Type '%s' not supported by GForce tail (gtail). Either add the prefix utils::" +"tail(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1085 gsumm.c:1176 +#, c-format +msgid "nrow [%d] != length(x) [%d] in ghead" +msgstr "" + +#: gsumm.c:1153 +#, c-format +msgid "" +"Type '%s' not supported by GForce head (ghead). Either add the prefix utils::" +"head(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1161 +msgid "" +"Internal error, gtail is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1166 +msgid "" +"Internal error, ghead is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1172 +msgid "" +"Internal error, `g[` (gnthvalue) is only implemented single value subsets " +"with positive index, e.g., .SD[2]. This should have been caught before. " +"please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1250 +#, c-format +msgid "" +"Type '%s' not supported by GForce subset `[` (gnthvalue). Either add the " +"prefix utils::head(.) or turn off GForce optimization using " +"options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1262 +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 "" + +#: gsumm.c:1263 +msgid "var/sd is not meaningful for factors." +msgstr "" + +#: gsumm.c:1266 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gvar" +msgstr "" + +#: gsumm.c:1382 +#, c-format +msgid "" +"Type '%s' not supported by GForce var (gvar). Either add the prefix stats::" +"var(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1384 +#, c-format +msgid "" +"Type '%s' not supported by GForce sd (gsd). Either add the prefix stats::" +"sd(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1403 +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 "" + +#: gsumm.c:1404 +msgid "prod is not meaningful for factors." +msgstr "" + +#: gsumm.c:1409 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gprod" +msgstr "" + +#: gsumm.c:1411 +#, c-format +msgid "Unable to allocate %d * %d bytes for gprod" +msgstr "" + +#: gsumm.c:1446 +#, c-format +msgid "" +"Type '%s' not supported by GForce prod (gprod). Either add the prefix base::" +"prod(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: ijoin.c:22 ijoin.c:243 +msgid "" +"Internal error: invalid value for 'mult'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:29 ijoin.c:250 +msgid "" +"Internal error: invalid value for 'type'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:56 ijoin.c:121 +#, c-format +msgid "Internal error: unknown type in mult=%d in lookup: %d" +msgstr "" + +#: ijoin.c:124 ijoin.c:215 +#, c-format +msgid "Internal error: unknown mult in lookup: %d" +msgstr "" + +#: ijoin.c:128 +#, c-format +msgid "First pass on calculating lengths in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:141 +#, c-format +msgid "Second pass on allocation in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:160 +#, c-format +msgid "Internal error: unknown type lookup should have been caught earlier: %d" +msgstr "" + +#: ijoin.c:212 +#, c-format +msgid "" +"Internal error: unknown type in mult=%d in lookup should have been caught " +"earlier: %d" +msgstr "" + +#: ijoin.c:220 +#, c-format +msgid "Final step in generating lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:323 +#, c-format +msgid "Internal error: unknown type in mult=ALL in overlaps: %d" +msgstr "" + +#: ijoin.c:328 +#, c-format +msgid "" +"First pass on calculating lengths in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:464 ijoin.c:571 ijoin.c:720 +#, c-format +msgid "Internal error: unknown type in mult=%d in overlaps: %d" +msgstr "" + +#: ijoin.c:723 +#, c-format +msgid "Internal error: unknown mult in overlaps: %d" +msgstr "" + +#: ijoin.c:727 +#, c-format +msgid "Final step, fetching indices in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: init.c:198 +#, c-format +msgid "" +"Pointers are %d bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "" + +#: init.c:209 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "" + +#: init.c:210 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "" + +#: init.c:211 +#, c-format +msgid "Checking sizeof(int) [%d] is 4 %s" +msgstr "" + +#: init.c:212 +#, c-format +msgid "Checking sizeof(double) [%d] is 8 %s" +msgstr "" + +#: init.c:214 +#, c-format +msgid "Checking sizeof(long long) [%d] is 8 %s" +msgstr "" + +#: init.c:215 +#, c-format +msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" +msgstr "" + +#: init.c:216 +#, c-format +msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" +msgstr "" + +#: init.c:217 +#, c-format +msgid "Checking sizeof(uint64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:218 +#, c-format +msgid "Checking sizeof(int64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:219 +#, c-format +msgid "Checking sizeof(signed char) [%d] is 1 %s" +msgstr "" + +#: init.c:220 +#, c-format +msgid "Checking sizeof(int8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:221 +#, c-format +msgid "Checking sizeof(uint8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:222 +#, c-format +msgid "Checking sizeof(int16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:223 +#, c-format +msgid "Checking sizeof(uint16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:226 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "" + +#: init.c:227 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" +msgstr "" + +#: init.c:234 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "" + +#: init.c:237 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "" + +#: init.c:240 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "" + +#: init.c:243 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "" + +#: init.c:246 +msgid "The ascii character '/' is not just before '0'" +msgstr "" + +#: init.c:247 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "" + +#: init.c:248 +msgid "The ascii character ':' is not just after '9'" +msgstr "" + +#: init.c:249 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "" + +#: init.c:254 +#, c-format +msgid "Conversion of NA_INT64 via double failed %lld!=%lld" +msgstr "" + +#: init.c:258 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "" + +#: init.c:259 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "" + +#: init.c:260 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:261 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:290 +#, c-format +msgid "PRINTNAME(install(\")integer64\")) has returned %s not %s" +msgstr "" + +#: init.c:359 +msgid ".Last.value in namespace is not a length 1 integer" +msgstr "" + +#: nafill.c:83 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "" + +#: nafill.c:85 nafill.c:95 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "" + +#: nafill.c:133 nafill.c:161 +msgid "" +"Internal error: invalid type argument in nafillR function, should have been " +"caught before. Please report to data.table issue tracker." +msgstr "" + +#: nafill.c:177 +#, c-format +msgid "%s: parallel processing of %d column(s) took %.3fs\n" +msgstr "" + +#: openmp-utils.c:22 +#, 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 "" + +#: openmp-utils.c:40 +#, 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 "" + +#: openmp-utils.c:67 +msgid "'verbose' must be TRUE or FALSE" +msgstr "" + +#: openmp-utils.c:70 +msgid "" +"This installation of data.table has not been compiled with OpenMP support.\n" +msgstr "" + +#: openmp-utils.c:75 +#, c-format +msgid " omp_get_num_procs() %d\n" +msgstr "" + +#: openmp-utils.c:76 +#, c-format +msgid " R_DATATABLE_NUM_PROCS_PERCENT %s\n" +msgstr "" + +#: openmp-utils.c:77 +#, c-format +msgid " R_DATATABLE_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:78 +#, c-format +msgid " omp_get_thread_limit() %d\n" +msgstr "" + +#: openmp-utils.c:79 +#, c-format +msgid " omp_get_max_threads() %d\n" +msgstr "" + +#: openmp-utils.c:80 +#, c-format +msgid " OMP_THREAD_LIMIT %s\n" +msgstr "" + +#: openmp-utils.c:81 +#, c-format +msgid " OMP_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:82 +#, c-format +msgid " RestoreAfterFork %s\n" +msgstr "" + +#: openmp-utils.c:83 +#, c-format +msgid " data.table is using %d threads. See ?setDTthreads.\n" +msgstr "" + +#: openmp-utils.c:91 +msgid "" +"restore_after_fork= must be TRUE, FALSE, or NULL (default). " +"getDTthreads(verbose=TRUE) reports the current setting.\n" +msgstr "" + +#: openmp-utils.c:105 +#, c-format +msgid "" +"threads= must be either NULL (default) or a single number. It has length %d" +msgstr "" + +#: openmp-utils.c:107 +msgid "threads= must be either NULL (default) or type integer/numeric" +msgstr "" + +#: openmp-utils.c:109 +msgid "" +"threads= must be either NULL or a single integer >= 0. See ?setDTthreads." +msgstr "" + +#: openmp-utils.c:114 +msgid "Internal error: percent= must be TRUE or FALSE at C level" +msgstr "" + +#: openmp-utils.c:117 +#, c-format +msgid "" +"Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C " +"level)." +msgstr "" + +#: rbindlist.c:8 +msgid "fill= should be TRUE or FALSE" +msgstr "" + +#: rbindlist.c:10 +msgid "use.names= should be TRUE, FALSE, or not used (\"check\" by default)" +msgstr "" + +#: rbindlist.c:12 +msgid "" +"Input to rbindlist must be a list. This list can contain data.tables, data." +"frames or plain lists." +msgstr "" + +#: rbindlist.c:16 +msgid "use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE." +msgstr "" + +#: rbindlist.c:20 +msgid "Internal error: rbindlist.c idcol is not a single string" +msgstr "" + +#: rbindlist.c:31 +#, c-format +msgid "Item %d of input is not a data.frame, data.table or list" +msgstr "" + +#: rbindlist.c:39 +#, c-format +msgid "" +"Item %d has %d columns, inconsistent with item %d which has %d columns. To " +"fill missing columns use fill=TRUE." +msgstr "" + +#: rbindlist.c:42 +#, c-format +msgid "Item %d has %d columns but %d column names. Invalid object." +msgstr "" + +#: rbindlist.c:49 +#, 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 "" + +#: rbindlist.c:58 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has " +"been filled with NA (NULL for list columns) to make each item uniform." +msgstr "" + +#: rbindlist.c:62 +#, c-format +msgid "" +"Total rows in the list is %lld which is larger than the maximum number of " +"rows, currently %d" +msgstr "" + +#: rbindlist.c:63 +msgid "use.names=TRUE but no item of input list has any names" +msgstr "" + +#: rbindlist.c:71 +#, c-format +msgid "" +"Failed to allocate upper bound of %lld unique column names [sum(lapply(l," +"ncol))]" +msgstr "" + +#: rbindlist.c:102 +#, c-format +msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:136 +#, c-format +msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:191 +msgid "" +"Internal error: usenames==NA but fill=TRUE. usenames should have been set to " +"TRUE earlier with warning." +msgstr "" + +#: rbindlist.c:196 +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 "" + +#: rbindlist.c:206 +msgid "" +"Internal error: could not find the first column name not present in earlier " +"item" +msgstr "" + +#: rbindlist.c:210 +#, 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 "" + +#: rbindlist.c:218 +#, c-format +msgid "" +"Internal error: usenames==NA but an out-of-order name has been found in an " +"item with no names or the first item. [%d]" +msgstr "" + +#: rbindlist.c:219 +#, 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 "" + +#: rbindlist.c:228 +msgid "" +"options()$datatable.rbindlist.check is set but is not a single string. See " +"news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:235 +#, c-format +msgid "" +"options()$datatable.rbindlist.check=='%s' which is not " +"'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:297 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" + +#: rbindlist.c:315 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d." +msgstr "" + +#: rbindlist.c:325 +#, c-format +msgid "" +"Internal error: column %d of result is determined to be integer64 but " +"maxType=='%s' != REALSXP" +msgstr "" + +#: rbindlist.c:361 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "" + +#: rbindlist.c:382 +#, 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 "" + +#: rbindlist.c:387 +#, 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 "" + +#: rbindlist.c:432 +#, c-format +msgid "" +"Failed to allocate working memory for %d factor levels of result column %d " +"when reading item %d of item %d" +msgstr "" + +#: rbindlist.c:522 +#, c-format +msgid "Column %d of item %d: %s" +msgstr "" + +#: reorder.c:17 +#, c-format +msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:19 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d). Invalid " +"data.table." +msgstr "" + +#: reorder.c:27 +#, c-format +msgid "" +"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " +"supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:28 +msgid "" +"Internal error in reorder.c: cannot reorder an ALTREP vector. Please see " +"NEWS item 2 in v1.11.4 and report this as a bug." +msgstr "" + +#: reorder.c:33 +msgid "order must be an integer vector" +msgstr "" + +#: reorder.c:34 +#, c-format +msgid "nrow(x)[%d]!=length(order)[%d]" +msgstr "" + +#: reorder.c:48 +#, c-format +msgid "order is not a permutation of 1:nrow[%d]" +msgstr "" + +#: reorder.c:57 +#, c-format +msgid "" +"Unable to allocate %d * %d bytes of working memory for reordering data.table" +msgstr "" + +#: shift.c:17 +#, c-format +msgid "" +"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" +msgstr "" + +#: shift.c:24 shift.c:28 +msgid "" +"Internal error: invalid type for shift(), should have been caught before. " +"please report to data.table issue tracker" +msgstr "" + +#: shift.c:31 +msgid "Internal error: k must be integer" +msgstr "" + +#: shift.c:33 +#, c-format +msgid "Item %d of n is NA" +msgstr "" + +#: shift.c:157 +#, c-format +msgid "Unsupported type '%s'" +msgstr "" + +#: subset.c:7 +#, c-format +msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" +msgstr "" + +#: subset.c:88 +#, c-format +msgid "" +"Internal error: column type '%s' not supported by data.table subset. All " +"known types are supported so please report as bug." +msgstr "" + +#: subset.c:97 subset.c:121 +#, c-format +msgid "Internal error. 'idx' is type '%s' not 'integer'" +msgstr "" + +#: subset.c:122 +#, c-format +msgid "" +"Internal error. 'maxArg' is type '%s' and length %d, should be an integer " +"singleton" +msgstr "" + +#: subset.c:123 +msgid "Internal error: allowOverMax must be TRUE/FALSE" +msgstr "" + +#: subset.c:125 +#, c-format +msgid "Internal error. max is %d, must be >= 0." +msgstr "" + +#: subset.c:149 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]" +msgstr "" + +#: subset.c:161 +#, c-format +msgid "" +"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." +msgstr "" + +#: subset.c:171 +#, c-format +msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." +msgstr "" + +#: subset.c:207 +#, 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 "" + +#: subset.c:209 +#, 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 "" + +#: subset.c:223 +#, c-format +msgid "Column %d is NULL; malformed data.table." +msgstr "" + +#: subset.c:226 +#, c-format +msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." +msgstr "" + +#: subset.c:231 +#, c-format +msgid "" +"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." +"table." +msgstr "" + +#: subset.c:247 +#, c-format +msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" +msgstr "" + +#: subset.c:260 +#, c-format +msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" +msgstr "" + +#: subset.c:337 +msgid "" +"Internal error: NULL can not be subset. It is invalid for a data.table to " +"contain a NULL column." +msgstr "" + +#: subset.c:339 +msgid "" +"Internal error: CsubsetVector is internal-use-only but has received " +"negatives, zeros or out-of-range" +msgstr "" + +#: transpose.c:9 +msgid "l must be a list." +msgstr "" + +#: transpose.c:13 +msgid "ignore.empty should be logical TRUE/FALSE." +msgstr "" + +#: 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 "" + +#: transpose.c:19 +msgid "fill must be a length 1 vector, such as the default NA" +msgstr "" + +#: transpose.c:28 +#, c-format +msgid "Item %d of list input is not an atomic vector" +msgstr "" + +#: types.c:55 +msgid "internal error: status, nx, nk must be integer" +msgstr "" + +#: uniqlist.c:14 +msgid "Internal error: uniqlist has not been passed a list of columns" +msgstr "" + +#: uniqlist.c:17 +msgid "Internal error: uniqlist has been passed a non-integer order" +msgstr "" + +#: uniqlist.c:18 +msgid "Internal error: uniqlist has been passed a length-0 order" +msgstr "" + +#: uniqlist.c:19 +#, c-format +msgid "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" +msgstr "" + +#: uniqlist.c:96 uniqlist.c:127 uniqlist.c:208 uniqlist.c:245 uniqlist.c:318 +#, c-format +msgid "Type '%s' not supported" +msgstr "" + +#: uniqlist.c:148 +msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" +msgstr "" + +#: uniqlist.c:149 +msgid "" +"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" +msgstr "" + +#: uniqlist.c:167 +msgid "cols must be an integer vector with length >= 1" +msgstr "" + +#: uniqlist.c:171 +#, c-format +msgid "Item %d of cols is %d which is outside range of l [1,length(l)=%d]" +msgstr "" + +#: uniqlist.c:174 +#, c-format +msgid "" +"All elements to input list must be of same length. Element [%d] has length " +"%llu != length of first element = %llu." +msgstr "" + +#: uniqlist.c:255 +msgid "Internal error: nestedid was not passed a list length 1 or more" +msgstr "" + +#: uniqlist.c:262 +#, c-format +msgid "Internal error: nrows[%d]>0 but ngrps==0" +msgstr "" + +#: uniqlist.c:264 +msgid "cols must be an integer vector of positive length" +msgstr "" + +#: uniqlist.c:349 +msgid "x is not a logical vector" +msgstr "" + +#: utils.c:73 +#, c-format +msgid "Unsupported type '%s' passed to allNA()" +msgstr "" + +#: utils.c:92 +msgid "'x' argument must be data.table compatible" +msgstr "" + +#: utils.c:94 +msgid "'check_dups' argument must be TRUE or FALSE" +msgstr "" + +#: utils.c:110 +msgid "" +"argument specifying columns is type 'double' and one or more items in it are " +"not whole integers" +msgstr "" + +#: utils.c:116 +#, c-format +msgid "argument specifying columns specify non existing column(s): cols[%d]=%d" +msgstr "" + +#: utils.c:121 +msgid "'x' argument data.table has no names" +msgstr "" + +#: utils.c:126 +#, c-format +msgid "" +"argument specifying columns specify non existing column(s): cols[%d]='%s'" +msgstr "" + +#: utils.c:129 +msgid "argument specifying columns must be character or numeric" +msgstr "" + +#: utils.c:132 +msgid "argument specifying columns specify duplicated column(s)" +msgstr "" + +#: utils.c:138 +#, c-format +msgid "%s: fill argument must be length 1" +msgstr "" + +#: utils.c:171 +#, c-format +msgid "%s: fill argument must be numeric" +msgstr "" + +#: utils.c:273 +#, c-format +msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" +msgstr "" + +#: utils.c:277 +#, c-format +msgid "" +"Internal error: type '%s' passed to copyAsPlain() but it seems " +"copyMostAttrib() retains ALTREP attributes" +msgstr "" + +#: utils.c:312 +#, c-format +msgid "Found and copied %d column%s with a shared memory address\n" +msgstr "" + +#: vecseq.c:13 +msgid "x must be an integer vector" +msgstr "" + +#: vecseq.c:14 +msgid "len must be an integer vector" +msgstr "" + +#: vecseq.c:15 +msgid "x and len must be the same length" +msgstr "" + +#: 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 "" + +#: vecseq.c:25 +msgid "clamp must be a double vector length 1" +msgstr "" + +#: vecseq.c:27 +msgid "clamp must be positive" +msgstr "" + +#: 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 "" + +#: wrappers.c:11 +msgid "Attribute name must be a character vector of length 1" +msgstr "" + +#: 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 "" + +#: wrappers.c:59 +msgid "First argument to setlistelt must be a list()" +msgstr "" + +#: wrappers.c:60 +msgid "Second argument to setlistelt must a length 1 integer vector" +msgstr "" + +#: wrappers.c:62 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "" + +#: wrappers.c:84 +msgid "x isn't a VECSXP" +msgstr "" + +#: wrappers.c:99 +#, c-format +msgid "" +"dim.data.table expects a data.table as input (which is a list), but seems to " +"be of type %s" +msgstr "" diff --git a/src/assign.c b/src/assign.c index 1d33f9c3c2..11dfbb51e9 100644 --- a/src/assign.c +++ b/src/assign.c @@ -6,12 +6,12 @@ static void finalizer(SEXP p) { SEXP x; R_len_t n, l, tl; - if(!R_ExternalPtrAddr(p)) error("Internal error: finalizer hasn't received an ExternalPtr"); // # nocov + if(!R_ExternalPtrAddr(p)) error(_("Internal error: finalizer hasn't received an ExternalPtr")); // # nocov p = R_ExternalPtrTag(p); - if (!isString(p)) error("Internal error: finalizer's ExternalPtr doesn't see names in tag"); // # nocov + if (!isString(p)) error(_("Internal error: finalizer's ExternalPtr doesn't see names in tag")); // # nocov l = LENGTH(p); tl = TRUELENGTH(p); - if (l<0 || tl0 but 0 but l) ? n : l); // e.g. test 848 and 851 in R > 3.0.2 // added (n>l) ? ... for #970, see test 1481. // TO DO: test realloc names if selfrefnamesok (users can setattr(x,"name") themselves for example. // if (TRUELENGTH(getAttrib(dt,R_NamesSymbol))!=tl) - // error("Internal error: tl of dt passes checks, but tl of names (%d) != tl of dt (%d)", tl, TRUELENGTH(getAttrib(dt,R_NamesSymbol))); // # nocov + // error(_("Internal error: tl of dt passes checks, but tl of names (%d) != tl of dt (%d)"), tl, TRUELENGTH(getAttrib(dt,R_NamesSymbol))); // # nocov tl = TRUELENGTH(dt); // R <= 2.13.2 and we didn't catch uninitialized tl somehow - if (tl<0) error("Internal error, tl of class is marked but tl<0."); // # nocov - if (tl>0 && tll+10000) warning("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().",tl,l); + if (tl<0) error(_("Internal error, tl of class is marked but tl<0.")); // # nocov + if (tl>0 && tll+10000) warning(_("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()."),tl,l); if (n>tl) return(shallow(dt,R_NilValue,n)); // usual case (increasing alloc) - if (n=0 and not NA.", ans); + error(_("getOption('datatable.alloc')==%d. It must be >=0 and not NA."), ans); return ans; } SEXP alloccolwrapper(SEXP dt, SEXP overAllocArg, SEXP verbose) { - if (!isLogical(verbose) || length(verbose)!=1) error("verbose must be TRUE or FALSE"); + if (!isLogical(verbose) || length(verbose)!=1) error(_("verbose must be TRUE or FALSE")); int overAlloc = checkOverAlloc(overAllocArg); SEXP ans = PROTECT(alloccol(dt, length(dt)+overAlloc, LOGICAL(verbose)[0])); @@ -286,10 +286,10 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) const char *c1, *tc1, *tc2; int *buf, newKeyLength, indexNo; size_t size; // must be size_t otherwise overflow later in memcpy - if (isNull(dt)) error("assign has been passed a NULL dt"); - if (TYPEOF(dt) != VECSXP) error("dt passed to assign isn't type VECSXP"); + if (isNull(dt)) error(_("assign has been passed a NULL dt")); + if (TYPEOF(dt) != VECSXP) error(_("dt passed to assign isn't type VECSXP")); if (islocked(dt)) - error(".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."); + error(_(".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.")); // We allow set() on data.frame too; e.g. package Causata uses set() on a data.frame in tests/testTransformationReplay.R // := is only allowed on a data.table. However, the ":=" = stop(...) message in data.table.R will have already @@ -297,15 +297,15 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) // For data.frame, can use set() on existing columns but not add new ones because DF are not over-allocated. bool isDataTable = INHERITS(dt, char_datatable); if (!isDataTable && !INHERITS(dt, char_dataframe)) - error("Internal error: dt passed to Cassign is not a data.table or data.frame"); // # nocov + error(_("Internal error: dt passed to Cassign is not a data.table or data.frame")); // # nocov oldncol = LENGTH(dt); SEXP names = PROTECT(getAttrib(dt, R_NamesSymbol)); protecti++; - if (isNull(names)) error("dt passed to assign has no names"); + if (isNull(names)) error(_("dt passed to assign has no names")); if (length(names)!=oldncol) - error("Internal error in assign: length of names (%d) is not length of dt (%d)",length(names),oldncol); // # nocov + error(_("Internal error in assign: length of names (%d) is not length of dt (%d)"),length(names),oldncol); // # nocov if (isNull(dt)) { - error("data.table is NULL; malformed. A null data.table should be an empty list. typeof() should always return 'list' for data.table."); // # nocov + error(_("data.table is NULL; malformed. A null data.table should be an empty list. typeof() should always return 'list' for data.table.")); // # nocov // Not possible to test because R won't permit attributes be attached to NULL (which is good and we like); warning from R 3.4.0+ tested by 944.5 } const int nrow = LENGTH(dt) ? length(VECTOR_ELT(dt,0)) : @@ -314,24 +314,24 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (isNull(rows)) { numToDo = nrow; targetlen = nrow; - if (verbose) Rprintf("Assigning to all %d rows\n", nrow); + if (verbose) Rprintf(_("Assigning to all %d rows\n"), nrow); // fast way to assign to whole column, without creating 1:nrow(x) vector up in R, or here in C } else { if (isReal(rows)) { rows = PROTECT(coerceVector(rows, INTSXP)); protecti++; - warning("Coerced i from numeric to integer. Please pass integer for efficiency; e.g., 2L rather than 2"); + warning(_("Coerced i from numeric to integer. Please pass integer for efficiency; e.g., 2L rather than 2")); } if (!isInteger(rows)) - error("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.", type2char(TYPEOF(rows))); + error(_("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."), type2char(TYPEOF(rows))); targetlen = length(rows); numToDo = 0; const int *rowsd = INTEGER(rows); for (i=0; inrow) - error("i[%d] is %d which is out of range [1,nrow=%d].",i+1,rowsd[i],nrow); // set() reaches here (test 2005.2); := reaches the same error in subset.c first + error(_("i[%d] is %d which is out of range [1,nrow=%d]."),i+1,rowsd[i],nrow); // set() reaches here (test 2005.2); := reaches the same error in subset.c first if (rowsd[i]>=1) numToDo++; } - if (verbose) Rprintf("Assigning to %d row subset of %d rows\n", numToDo, nrow); + if (verbose) Rprintf(_("Assigning to %d row subset of %d rows\n"), numToDo, nrow); // TODO: include in message if any rows are assigned several times (e.g. by=.EACHI with dups in i) if (numToDo==0) { if (!length(newcolnames)) { @@ -339,12 +339,12 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) UNPROTECT(protecti); return(dt); // all items of rows either 0 or NA. !length(newcolnames) for #759 } - if (verbose) Rprintf("Added %d new column%s initialized with all-NA\n", + if (verbose) Rprintf(_("Added %d new column%s initialized with all-NA\n"), length(newcolnames), (length(newcolnames)>1)?"s":""); } } if (!length(cols)) { - warning("length(LHS)==0; no columns to delete or assign RHS to."); // test 1295 covers + warning(_("length(LHS)==0; no columns to delete or assign RHS to.")); // test 1295 covers *_Last_updated = 0; UNPROTECT(protecti); return(dt); @@ -358,7 +358,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (INTEGER(tmp)[i] == 0) buf[k++] = i; } if (k>0) { - if (!isDataTable) error("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."); + if (!isDataTable) error(_("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.")); newcolnames = PROTECT(allocVector(STRSXP, k)); protecti++; for (i=0; i1; // initial value; may be revised below - if (verbose) Rprintf("RHS_list_of_columns == %s\n", RHS_list_of_columns ? "true" : "false"); + if (verbose) Rprintf(_("RHS_list_of_columns == %s\n"), RHS_list_of_columns ? "true" : "false"); if (TYPEOF(values)==VECSXP && length(cols)==1 && length(values)==1) { SEXP item = VECTOR_ELT(values,0); if (isNull(item) || length(item)==1 || length(item)==targetlen) { RHS_list_of_columns=true; - if (verbose) Rprintf("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", length(item), targetlen); + if (verbose) Rprintf(_("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"), length(item), targetlen); } } if (RHS_list_of_columns) { if (length(values)==0) - error("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()).", length(cols)); + error(_("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())."), length(cols)); if (length(values)!=length(cols)) { if (length(values)==1) { // test 351.1; c("colA","colB"):=list(13:15) uses 13:15 for both columns values = VECTOR_ELT(values,0); RHS_list_of_columns = false; - if (verbose) Rprintf("Recycling single RHS list item across %d columns. Please unwrap RHS.\n", length(cols)); + if (verbose) Rprintf(_("Recycling single RHS list item across %d columns. Please unwrap RHS.\n"), length(cols)); } else { - error("Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2.", length(cols), length(values)); + error(_("Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2."), length(cols), length(values)); } } } @@ -403,42 +402,41 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) for (i=0; ioldncol+length(newcolnames)) { - if (!isDataTable) error("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.", i+1, coln, oldncol); - else error("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.", i+1, coln, oldncol); + if (!isDataTable) error(_("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."), i+1, coln, oldncol); + else error(_("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."), i+1, coln, oldncol); } coln--; SEXP thisvalue = RHS_list_of_columns ? VECTOR_ELT(values, i) : values; vlen = length(thisvalue); - if (isNull(thisvalue) && !isNull(rows)) error("When deleting columns, i should not be provided"); // #1082, #3089 + if (isNull(thisvalue) && !isNull(rows)) error(_("When deleting columns, i should not be provided")); // #1082, #3089 if (coln+1 <= oldncol) colnam = STRING_ELT(names,coln); else colnam = STRING_ELT(newcolnames,coln-length(names)); if (coln+1 <= oldncol && isNull(thisvalue)) continue; // delete existing column(s) afterwards, near end of this function //if (vlen<1 && nrow>0) { if (coln+1 <= oldncol && nrow>0 && vlen<1 && numToDo>0) { // numToDo > 0 fixes #2829, see test 1911 - error("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.", CHAR(STRING_ELT(names,coln))); + error(_("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."), CHAR(STRING_ELT(names,coln))); } if (coln+1 > oldncol && TYPEOF(thisvalue)!=VECSXP) { // list() is ok for new columns newcolnum = coln-length(names); if (newcolnum<0 || newcolnum>=length(newcolnames)) - error("Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d", length(newcolnames), length(names), coln); // # nocov + error(_("Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d"), length(newcolnames), length(names), coln); // # nocov if (isNull(thisvalue)) { - warning("Column '%s' does not exist to remove",CHAR(STRING_ELT(newcolnames,newcolnum))); + warning(_("Column '%s' does not exist to remove"),CHAR(STRING_ELT(newcolnames,newcolnum))); continue; } // RHS of assignment to new column is zero length but we'll use its type to create all-NA column of that type } if (isMatrix(thisvalue) && (j=INTEGER(getAttrib(thisvalue, R_DimSymbol))[1]) > 1) // matrix passes above (considered atomic vector) - warning("%d column matrix RHS of := will be treated as one vector", j); + warning(_("%d column matrix RHS of := will be treated as one vector"), j); const SEXP existing = (coln+1)<=oldncol ? VECTOR_ELT(dt,coln) : R_NilValue; if (isFactor(existing) && !isString(thisvalue) && TYPEOF(thisvalue)!=INTSXP && TYPEOF(thisvalue)!=LGLSXP && !isReal(thisvalue) && !isNewList(thisvalue)) { // !=INTSXP includes factor - error("Can't assign to column '%s' (type 'factor') a value of type '%s' (not character, factor, integer or numeric)", + error(_("Can't assign to column '%s' (type 'factor') a value of type '%s' (not character, factor, integer or numeric)"), CHAR(STRING_ELT(names,coln)),type2char(TYPEOF(thisvalue))); } if (nrow>0 && targetlen>0 && vlen>1 && vlen!=targetlen && (TYPEOF(existing)!=VECSXP || TYPEOF(thisvalue)==VECSXP)) { // note that isNewList(R_NilValue) is true so it needs to be TYPEOF(existing)!=VECSXP above - error("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.", vlen, targetlen, CHAR(colnam)); + error(_("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."), vlen, targetlen, CHAR(colnam)); } } // having now checked the inputs, from this point there should be no errors so we can now proceed to @@ -448,18 +446,18 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) oldtncol = TRUELENGTH(dt); // TO DO: oldtncol can be just called tl now, as we won't realloc here any more. if (oldtncololdncol+10000L) warning("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().",oldtncol, oldncol); + if (oldtncol>oldncol+10000L) warning(_("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()."),oldtncol, oldncol); if (oldtncol < oldncol+LENGTH(newcolnames)) - error("Internal error: DT passed to assign has not been allocated enough column slots. l=%d, tl=%d, adding %d", oldncol, oldtncol, LENGTH(newcolnames)); // # nocov + error(_("Internal error: DT passed to assign has not been allocated enough column slots. l=%d, tl=%d, adding %d"), oldncol, oldtncol, LENGTH(newcolnames)); // # nocov if (!selfrefnamesok(dt,verbose)) - error("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."); // # nocov + error(_("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.")); // # nocov // Can growVector at this point easily enough, but it shouldn't happen in first place so leave it as // strong error message for now. else if (TRUELENGTH(names) != oldtncol) - error("Internal error: selfrefnames is ok but tl names [%d] != tl [%d]", TRUELENGTH(names), oldtncol); // # nocov + error(_("Internal error: selfrefnames is ok but tl names [%d] != tl [%d]"), TRUELENGTH(names), oldtncol); // # nocov SETLENGTH(dt, oldncol+LENGTH(newcolnames)); SETLENGTH(names, oldncol+LENGTH(newcolnames)); for (i=0; i0) // assigning the same values to a second column. Have to ensure a copy #2540 ) { if (verbose) { - Rprintf("RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but then is being plonked. length(values)==%d; length(cols)==%d)\n", + Rprintf(_("RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but then is being plonked. length(values)==%d; length(cols)==%d)\n"), i+1, NAMED(thisvalue), MAYBE_SHARED(thisvalue), length(values), length(cols)); } thisvalue = copyAsPlain(thisvalue); // PROTECT not needed as assigned as element to protected list below. } else { - if (verbose) Rprintf("Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n", NAMED(thisvalue), MAYBE_SHARED(thisvalue)); // e.g. DT[,a:=as.character(a)] as tested by 754.5 + if (verbose) Rprintf(_("Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n"), NAMED(thisvalue), MAYBE_SHARED(thisvalue)); // e.g. DT[,a:=as.character(a)] as tested by 754.5 } SET_VECTOR_ELT(dt, coln, thisvalue); // plonk new column in as it's already the correct length setAttrib(thisvalue, R_NamesSymbol, R_NilValue); // clear names such as DT[,a:=mapvector[a]] @@ -555,7 +553,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (*tc1!='_' || *(tc1+1)!='_') { // fix for #1396 if (verbose) { - Rprintf("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", tc1); + Rprintf(_("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"), tc1); } setAttrib(index, a, R_NilValue); indexNo++; @@ -563,12 +561,12 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) continue; // with next index } tc1 += 2; // tc1 always marks the start of a key column - if (!*tc1) error("Internal error: index name ends with trailing __"); // # nocov + if (!*tc1) error(_("Internal error: index name ends with trailing __")); // # nocov // check the position of the first appearance of an assigned column in the index. // the new index will be truncated to this position. char *s4 = (char*) malloc(strlen(c1) + 3); if(s4 == NULL){ - error("Internal error: Couldn't allocate memory for s4."); // # nocov + error(_("Internal error: Couldn't allocate memory for s4.")); // # nocov } memcpy(s4, c1, strlen(c1)); memset(s4 + strlen(c1), '\0', 1); @@ -579,7 +577,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) char *s5 = (char*) malloc(strlen(tc2) + 5); //4 * '_' + \0 if(s5 == NULL){ free(s4); // # nocov - error("Internal error: Couldn't allocate memory for s5."); // # nocov + error(_("Internal error: Couldn't allocate memory for s5.")); // # nocov } memset(s5, '_', 2); memset(s5 + 2, '\0', 1); @@ -600,7 +598,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) setAttrib(index, a, R_NilValue); SET_STRING_ELT(indexNames, indexNo, NA_STRING); if (verbose) { - Rprintf("Dropping index '%s' due to an update on a key column\n", c1+2); + Rprintf(_("Dropping index '%s' due to an update on a key column\n"), c1+2); } } else if(newKeyLength < strlen(c1)) { SEXP s4Str = PROTECT(mkString(s4)); @@ -609,14 +607,14 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) SET_TAG(s, install(s4)); SET_STRING_ELT(indexNames, indexNo, mkChar(s4)); if (verbose) - Rprintf("Shortening index '%s' to '%s' due to an update on a key column\n", c1+2, s4 + 2); + Rprintf(_("Shortening index '%s' to '%s' due to an update on a key column\n"), c1+2, s4 + 2); } else { // indexLength > 0 || shortened name present already // indexLength > 0 indicates reordering. Drop it to avoid spurious reordering in non-indexed columns (#2372) // shortened anme already present indicates that index needs to be dropped to avoid duplicate indices. setAttrib(index, a, R_NilValue); SET_STRING_ELT(indexNames, indexNo, NA_STRING); if (verbose) - Rprintf("Dropping index '%s' due to an update on a key column\n", c1+2); + Rprintf(_("Dropping index '%s' due to an update on a key column\n"), c1+2); } UNPROTECT(1); // s4Str } //else: index is not affected by assign: nothing to be done @@ -686,11 +684,11 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, int slen = length(source); if (slen==0) return NULL; if (slen>1 && slen!=len && (!isNewList(target) || isNewList(source))) - error("Internal error: recycle length error not caught earlier. slen=%d len=%d", slen, len); // # nocov + error(_("Internal error: recycle length error not caught earlier. slen=%d len=%d"), slen, len); // # nocov // Internal error because the column has already been added to the DT, so length mismatch should have been caught before adding the column. // for 5647 this used to limit slen to len, but no longer if (colname==NULL) - error("Internal error: memrecycle has received NULL colname"); // # nocov + error(_("Internal error: memrecycle has received NULL colname")); // # nocov *memrecycle_message = '\0'; int protecti=0; if (isNewList(source)) { @@ -716,7 +714,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, if (sourceIsFactor || targetIsFactor) { if (!targetIsFactor) { if (!isString(target) && !isNewList(target)) - error("Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, character or list columns.", type2char(TYPEOF(target))); + error(_("Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, character or list columns."), type2char(TYPEOF(target))); // else assigning factor to character is left to later below, avoiding wasteful asCharacterFactor } else if (!sourceIsFactor && !isString(source)) { // target is factor @@ -730,7 +728,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, for (int i=0; inlevel) { - error("Assigning factor numbers to column %d named '%s'. But %d is outside the level range [1,%d]", colnum, colname, val, nlevel); + error(_("Assigning factor numbers to column %d named '%s'. But %d is outside the level range [1,%d]"), colnum, colname, val, nlevel); } } } else { @@ -738,13 +736,13 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, for (int i=0; inlevel)) { - error("Assigning factor numbers to column %d named '%s'. But %f is outside the level range [1,%d], or is not a whole number.", colnum, colname, val, nlevel); + error(_("Assigning factor numbers to column %d named '%s'. But %f is outside the level range [1,%d], or is not a whole number."), colnum, colname, val, nlevel); } } } // Now just let the valid level numbers fall through to regular assign by BODY below } else { - error("Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, character, NA in any type, or level numbers.", type2char(TYPEOF(source))); + error(_("Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, character, NA in any type, or level numbers."), type2char(TYPEOF(source))); } } else { // either factor or character being assigned to factor column @@ -765,7 +763,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, // # nocov start for (int j=0; j(INT_MAX/2) ? INT_MAX : nalloc*2; char *tmp = (char *)realloc(saveds, nalloc*sizeof(SEXP)); if (tmp==NULL) { // C spec states that if realloc() fails the original block is left untouched; it is not freed or moved. We rely on that here. savetl_end(); // # nocov free(saveds) happens inside savetl_end - error("Failed to realloc saveds to %d items in savetl", nalloc); // # nocov + error(_("Failed to realloc saveds to %d items in savetl"), nalloc); // # nocov } saveds = (SEXP *)tmp; tmp = (char *)realloc(savedtl, nalloc*sizeof(R_len_t)); if (tmp==NULL) { savetl_end(); // # nocov - error("Failed to realloc savedtl to %d items in savetl", nalloc); // # nocov + error(_("Failed to realloc savedtl to %d items in savetl"), nalloc); // # nocov } savedtl = (R_len_t *)tmp; } @@ -1204,13 +1202,13 @@ void savetl_end() { SEXP setcharvec(SEXP x, SEXP which, SEXP newx) { int w; - if (!isString(x)) error("x must be a character vector"); - if (!isInteger(which)) error("'which' must be an integer vector"); - if (!isString(newx)) error("'new' must be a character vector"); - if (LENGTH(newx)!=LENGTH(which)) error("'new' is length %d. Should be the same as length of 'which' (%d)",LENGTH(newx),LENGTH(which)); + if (!isString(x)) error(_("x must be a character vector")); + if (!isInteger(which)) error(_("'which' must be an integer vector")); + if (!isString(newx)) error(_("'new' must be a character vector")); + if (LENGTH(newx)!=LENGTH(which)) error(_("'new' is length %d. Should be the same as length of 'which' (%d)"),LENGTH(newx),LENGTH(which)); for (int i=0; iLENGTH(x)) error("Item %d of 'which' is %d which is outside range of the length %d character vector", i+1,w,LENGTH(x)); + if (w==NA_INTEGER || w<1 || w>LENGTH(x)) error(_("Item %d of 'which' is %d which is outside range of the length %d character vector"), i+1,w,LENGTH(x)); SET_STRING_ELT(x, w-1, STRING_ELT(newx, i)); } return R_NilValue; @@ -1220,18 +1218,18 @@ SEXP setcolorder(SEXP x, SEXP o) { SEXP names = getAttrib(x, R_NamesSymbol); const int *od = INTEGER(o), ncol=LENGTH(x); - if (isNull(names)) error("dt passed to setcolorder has no names"); + if (isNull(names)) error(_("dt passed to setcolorder has no names")); if (ncol != LENGTH(names)) - error("Internal error: dt passed to setcolorder has %d columns but %d names", ncol, LENGTH(names)); // # nocov + error(_("Internal error: dt passed to setcolorder has %d columns but %d names"), ncol, LENGTH(names)); // # nocov // Double-check here at C level that o[] is a strict permutation of 1:ncol. Reordering columns by reference makes no // difference to generations/refcnt so we can write behind barrier in this very special case of strict permutation. bool *seen = Calloc(ncol, bool); for (int i=0; incol) - error("Internal error: o passed to Csetcolorder contains an NA or out-of-bounds"); // # nocov + error(_("Internal error: o passed to Csetcolorder contains an NA or out-of-bounds")); // # nocov if (seen[od[i]-1]) - error("Internal error: o passed to Csetcolorder contains a duplicate"); // # nocov + error(_("Internal error: o passed to Csetcolorder contains a duplicate")); // # nocov seen[od[i]-1] = true; } Free(seen); @@ -1246,4 +1244,3 @@ SEXP setcolorder(SEXP x, SEXP o) Free(tmp); return(R_NilValue); } - diff --git a/src/between.c b/src/between.c index d7de5c7175..c1b6f14561 100644 --- a/src/between.c +++ b/src/between.c @@ -9,17 +9,17 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S if ((nl!=1 && nl!=longest) || (nu!=1 && nu!=longest) || (nx!=1 && nx!=longest)) { - error("Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==%d. Each should be either length 1 or the length of the longest.", nx, nl, nu); + error(_("Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==%d. Each should be either length 1 or the length of the longest."), nx, nl, nu); } const int longestBound = MAX(nl, nu); // just for when check=TRUE if (!isLogical(incbounds) || LOGICAL(incbounds)[0]==NA_LOGICAL) - error("incbounds must be TRUE or FALSE"); + error(_("incbounds must be TRUE or FALSE")); const bool open = !LOGICAL(incbounds)[0]; if (!isLogical(NAboundsArg) || LOGICAL(NAboundsArg)[0]==FALSE) - error("NAbounds must be TRUE or NA"); + error(_("NAbounds must be TRUE or NA")); const bool NAbounds = LOGICAL(NAboundsArg)[0]==TRUE; if (!isLogical(checkArg) || LOGICAL(checkArg)[0]==NA_LOGICAL) - error("check must be TRUE or FALSE"); + error(_("check must be TRUE or FALSE")); const bool check = LOGICAL(checkArg)[0]; const bool verbose = GetVerbose(); @@ -61,7 +61,7 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S if (check) for (int i=0; iu) - error("Item %d of lower (%d) is greater than item %d of upper (%d)", (i&lowMask)+1, l, (i&uppMask)+1, u); + error(_("Item %d of lower (%d) is greater than item %d of upper (%d)"), (i&lowMask)+1, l, (i&uppMask)+1, u); } if (NAbounds) { // default NAbounds==TRUE => NA bound means TRUE; i.e. asif lower=-Inf or upper==Inf) #pragma omp parallel for num_threads(getDTthreads()) @@ -79,20 +79,20 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S ansp[i] = (lok && uok) ? l+open<=elem && elem<=u-open : ((uok && elem>u-open) || (lok && elemu) - error("Item %d of lower (%lld) is greater than item %d of upper (%lld)", (i&lowMask)+1, l, (i&uppMask)+1, u); + error(_("Item %d of lower (%lld) is greater than item %d of upper (%lld)"), (i&lowMask)+1, l, (i&uppMask)+1, u); } if (NAbounds) { #pragma omp parallel for num_threads(getDTthreads()) @@ -109,17 +109,17 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S ansp[i] = (lok && uok) ? l+open<=elem && elem<=u-open : ((uok && elem>u-open) || (lok && elemu) - error("Item %d of lower (%f) is greater than item %d of upper (%f)", (i&lowMask)+1, l, (i&uppMask)+1, u); + error(_("Item %d of lower (%f) is greater than item %d of upper (%f)"), (i&lowMask)+1, l, (i&uppMask)+1, u); } if (open) { if (NAbounds) { @@ -137,7 +137,7 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S ansp[i] = (lok && uok) ? l=u) || (lok && elem<=l)) ? FALSE : NA_LOGICAL; } } - if (verbose) Rprintf("between parallel processing of double with open bounds took %8.3fs\n", omp_get_wtime()-tic); + if (verbose) Rprintf(_("between parallel processing of double with open bounds took %8.3fs\n"), omp_get_wtime()-tic); } else { if (NAbounds) { #pragma omp parallel for num_threads(getDTthreads()) @@ -154,7 +154,7 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S ansp[i] = (lok && uok) ? l<=elem && elem<=u : ((uok && elem>u) || (lok && elem0) - error("Item %d of lower ('%s') is greater than item %d of upper ('%s')", (i&lowMask)+1, CHAR(l), (i&uppMask)+1, CHAR(u)); + error(_("Item %d of lower ('%s') is greater than item %d of upper ('%s')"), (i&lowMask)+1, CHAR(l), (i&uppMask)+1, CHAR(u)); } if (NAbounds) { for (int i=0; i LENGTH(xcolsArg)) error("Internal error: length(icols) [%d] > length(xcols) [%d]", LENGTH(icolsArg), LENGTH(xcolsArg)); // # nocov + if (!isInteger(icolsArg)) error(_("Internal error: icols is not integer vector")); // # nocov + if (!isInteger(xcolsArg)) error(_("Internal error: xcols is not integer vector")); // # nocov + if (LENGTH(icolsArg) > LENGTH(xcolsArg)) error(_("Internal error: length(icols) [%d] > length(xcols) [%d]"), LENGTH(icolsArg), LENGTH(xcolsArg)); // # nocov icols = INTEGER(icolsArg); xcols = INTEGER(xcolsArg); xN = LENGTH(VECTOR_ELT(x,0)); iN = ilen = anslen = LENGTH(VECTOR_ELT(i,0)); ncol = LENGTH(icolsArg); // there may be more sorted columns in x than involved in the join for(int col=0; colLENGTH(i) || icols[col]<1) error("icols[%d]=%d outside range [1,length(i)=%d]", col, icols[col], LENGTH(i)); - if (xcols[col]>LENGTH(x) || xcols[col]<1) error("xcols[%d]=%d outside range [1,length(x)=%d]", col, xcols[col], LENGTH(x)); + if (icols[col]==NA_INTEGER) error(_("Internal error. icols[%d] is NA"), col); // # nocov + if (xcols[col]==NA_INTEGER) error(_("Internal error. xcols[%d] is NA"), col); // # nocov + if (icols[col]>LENGTH(i) || icols[col]<1) error(_("icols[%d]=%d outside range [1,length(i)=%d]"), col, icols[col], LENGTH(i)); + if (xcols[col]>LENGTH(x) || xcols[col]<1) error(_("xcols[%d]=%d outside range [1,length(x)=%d]"), col, xcols[col], LENGTH(x)); int it = TYPEOF(VECTOR_ELT(i, icols[col]-1)); int xt = TYPEOF(VECTOR_ELT(x, xcols[col]-1)); - if (iN && it!=xt) error("typeof x.%s (%s) != typeof i.%s (%s)", CHAR(STRING_ELT(getAttrib(x,R_NamesSymbol),xcols[col]-1)), type2char(xt), CHAR(STRING_ELT(getAttrib(i,R_NamesSymbol),icols[col]-1)), type2char(it)); + if (iN && it!=xt) error(_("typeof x.%s (%s) != typeof i.%s (%s)"), CHAR(STRING_ELT(getAttrib(x,R_NamesSymbol),xcols[col]-1)), type2char(xt), CHAR(STRING_ELT(getAttrib(i,R_NamesSymbol),icols[col]-1)), type2char(it)); } // raise(SIGINT); // rollArg, rollendsArg roll = 0.0; rollToNearest = FALSE; if (isString(rollarg)) { - if (strcmp(CHAR(STRING_ELT(rollarg,0)),"nearest") != 0) error("roll is character but not 'nearest'"); - if (TYPEOF(VECTOR_ELT(i, icols[ncol-1]-1))==STRSXP) error("roll='nearest' can't be applied to a character column, yet."); + if (strcmp(CHAR(STRING_ELT(rollarg,0)),"nearest") != 0) error(_("roll is character but not 'nearest'")); + if (TYPEOF(VECTOR_ELT(i, icols[ncol-1]-1))==STRSXP) error(_("roll='nearest' can't be applied to a character column, yet.")); roll=1.0; rollToNearest=TRUE; // the 1.0 here is just any non-0.0, so roll!=0.0 can be used later } else { - if (!isReal(rollarg)) error("Internal error: roll is not character or double"); // # nocov + if (!isReal(rollarg)) error(_("Internal error: roll is not character or double")); // # nocov roll = REAL(rollarg)[0]; // more common case (rolling forwards or backwards) or no roll when 0.0 } rollabs = fabs(roll); if (!isLogical(rollendsArg) || LENGTH(rollendsArg) != 2) - error("rollends must be a length 2 logical vector"); + error(_("rollends must be a length 2 logical vector")); rollends = LOGICAL(rollendsArg); // nomatch arg @@ -86,20 +86,20 @@ SEXP bmerge(SEXP iArg, SEXP xArg, SEXP icolsArg, SEXP xcolsArg, SEXP isorted, SE if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "all")) mult = ALL; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "first")) mult = FIRST; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "last")) mult = LAST; - else error("Internal error: invalid value for 'mult'. please report to data.table issue tracker"); // # nocov + else error(_("Internal error: invalid value for 'mult'. please report to data.table issue tracker")); // # nocov // opArg if (!isInteger(opArg) || length(opArg) != ncol) - error("Internal error: opArg is not an integer vector of length equal to length(on)"); // # nocov + error(_("Internal error: opArg is not an integer vector of length equal to length(on)")); // # nocov op = INTEGER(opArg); if (!isInteger(nqgrpArg)) - error("Internal error: nqgrpArg must be an integer vector"); // # nocov + error(_("Internal error: nqgrpArg must be an integer vector")); // # nocov nqgrp = nqgrpArg; // set global for bmerge_r scols = (!length(nqgrpArg)) ? 0 : -1; // starting col index, -1 is external group column for non-equi join case // nqmaxgrpArg if (!isInteger(nqmaxgrpArg) || length(nqmaxgrpArg) != 1 || INTEGER(nqmaxgrpArg)[0] <= 0) - error("Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector"); // # nocov + error(_("Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector")); // # nocov nqmaxgrp = INTEGER(nqmaxgrpArg)[0]; if (nqmaxgrp>1 && mult == ALL) { // non-equi case with mult=ALL, may need reallocation @@ -108,7 +108,7 @@ SEXP bmerge(SEXP iArg, SEXP xArg, SEXP icolsArg, SEXP xcolsArg, SEXP isorted, SE retLength = Calloc(anslen, int); retIndex = Calloc(anslen, int); if (retFirst==NULL || retLength==NULL || retIndex==NULL) - error("Internal error in allocating memory for non-equi join"); // # nocov + error(_("Internal error in allocating memory for non-equi join")); // # nocov // initialise retIndex here directly, as next loop is meant for both equi and non-equi joins for (int j=0; jxuppIn) error("Internal error: xlow!=xupp-1 || xlowxuppIn"); // # nocov + if (xlow != xupp-1 || xlowxuppIn) error(_("Internal error: xlow!=xupp-1 || xlowxuppIn")); // # nocov if (rollToNearest) { // value of roll ignored currently when nearest if ( (!lowmax || xlow>xlowIn) && (!uppmax || xupp #include "myomp.h" #include "types.h" +#include "po.h" // data.table depends on R>=3.0.0 when R_xlen_t was introduced // Before R 3.0.0, RLEN used to be switched to R_len_t as R_xlen_t wasn't available. diff --git a/src/dogroups.c b/src/dogroups.c index a68ab5f9f7..da9db1bdde 100644 --- a/src/dogroups.c +++ b/src/dogroups.c @@ -11,13 +11,13 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX Rboolean wasvector, firstalloc=FALSE, NullWarnDone=FALSE; clock_t tstart=0, tblock[10]={0}; int nblock[10]={0}; - if (!isInteger(order)) error("Internal error: order not integer vector"); // # nocov - if (TYPEOF(starts) != INTSXP) error("Internal error: starts not integer"); // # nocov - if (TYPEOF(lens) != INTSXP) error("Internal error: lens not integer"); // # nocov - // starts can now be NA (<0): if (INTEGER(starts)[0]<0 || INTEGER(lens)[0]<0) error("starts[1]<0 or lens[1]<0"); - if (!isNull(jiscols) && LENGTH(order) && !LOGICAL(on)[0]) error("Internal error: jiscols not NULL but o__ has length"); // # nocov - if (!isNull(xjiscols) && LENGTH(order) && !LOGICAL(on)[0]) error("Internal error: xjiscols not NULL but o__ has length"); // # nocov - if(!isEnvironment(env)) error("’env’ should be an environment"); + if (!isInteger(order)) error(_("Internal error: order not integer vector")); // # nocov + if (TYPEOF(starts) != INTSXP) error(_("Internal error: starts not integer")); // # nocov + if (TYPEOF(lens) != INTSXP) error(_("Internal error: lens not integer")); // # nocov + // starts can now be NA (<0): if (INTEGER(starts)[0]<0 || INTEGER(lens)[0]<0) error(_("starts[1]<0 or lens[1]<0")); + if (!isNull(jiscols) && LENGTH(order) && !LOGICAL(on)[0]) error(_("Internal error: jiscols not NULL but o__ has length")); // # nocov + if (!isNull(xjiscols) && LENGTH(order) && !LOGICAL(on)[0]) error(_("Internal error: xjiscols not NULL but o__ has length")); // # nocov + if(!isEnvironment(env)) error(_("'env' should be an environment")); ngrp = length(starts); // the number of groups (nrow(groups) will be larger when by) ngrpcols = length(grpcols); nrowgroups = length(VECTOR_ELT(groups,0)); @@ -36,11 +36,11 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX SET_STRING_ELT(bynames, i, STRING_ELT(getAttrib(groups,R_NamesSymbol), j)); defineVar(install(CHAR(STRING_ELT(bynames,i))), VECTOR_ELT(BY,i), env); // by vars can be used by name in j as well as via .BY if (SIZEOF(VECTOR_ELT(BY,i))==0) - error("Internal error: unsupported size-0 type '%s' in column %d of 'by' should have been caught earlier", type2char(TYPEOF(VECTOR_ELT(BY, i))), i+1); // #nocov + error(_("Internal error: unsupported size-0 type '%s' in column %d of 'by' should have been caught earlier"), type2char(TYPEOF(VECTOR_ELT(BY, i))), i+1); // #nocov } setAttrib(BY, R_NamesSymbol, bynames); // Fix for #5415 - BY doesn't retain names anymore R_LockBinding(sym_BY, env); - if (isNull(jiscols) && (length(bynames)!=length(groups) || length(bynames)!=length(grpcols))) error("!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]",length(bynames),length(groups),length(grpcols)); + if (isNull(jiscols) && (length(bynames)!=length(groups) || length(bynames)!=length(grpcols))) error(_("!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]"),length(bynames),length(groups),length(grpcols)); // TO DO: check this check above. N = PROTECT(findVar(install(".N"), env)); nprotect++; // PROTECT for rchk @@ -59,18 +59,18 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX // fetch rownames of .SD. rownames[1] is set to -thislen for each group, in case .SD is passed to // non data.table aware package that uses rownames for (s = ATTRIB(SD); s != R_NilValue && TAG(s)!=R_RowNamesSymbol; s = CDR(s)); // getAttrib0 basically but that's hidden in attrib.c - if (s==R_NilValue) error("row.names attribute of .SD not found"); + if (s==R_NilValue) error(_("row.names attribute of .SD not found")); rownames = CAR(s); - if (!isInteger(rownames) || LENGTH(rownames)!=2 || INTEGER(rownames)[0]!=NA_INTEGER) error("row.names of .SD isn't integer length 2 with NA as first item; i.e., .set_row_names(). [%s %d %d]",type2char(TYPEOF(rownames)),LENGTH(rownames),INTEGER(rownames)[0]); + if (!isInteger(rownames) || LENGTH(rownames)!=2 || INTEGER(rownames)[0]!=NA_INTEGER) error(_("row.names of .SD isn't integer length 2 with NA as first item; i.e., .set_row_names(). [%s %d %d]"),type2char(TYPEOF(rownames)),LENGTH(rownames),INTEGER(rownames)[0]); // fetch names of .SD and prepare symbols. In case they are copied-on-write by user assigning to those variables // using <- in j (which is valid, useful and tested), they are repointed to the .SD cols for each group. SEXP names = PROTECT(getAttrib(SDall, R_NamesSymbol)); nprotect++; - if (length(names) != length(SDall)) error("length(names)!=length(SD)"); + if (length(names) != length(SDall)) error(_("length(names)!=length(SD)")); SEXP *nameSyms = (SEXP *)R_alloc(length(names), sizeof(SEXP)); for(int i=0; i1 && vlen!=grpn) { SEXP colname = isNull(target) ? STRING_ELT(newnames, INTEGER(lhs)[j]-origncol-1) : STRING_ELT(dtnames,INTEGER(lhs)[j]-1); - error("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.",vlen,i+1,grpn,CHAR(colname)); + error(_("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."),vlen,i+1,grpn,CHAR(colname)); // e.g. in #4990 `:=` did not issue recycling warning during grouping. Now it is error not warning. } } @@ -301,7 +301,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX RHS = VECTOR_ELT(jval,j%LENGTH(jval)); if (isNull(target)) { // first time adding to new column - if (TRUELENGTH(dt) < INTEGER(lhs)[j]) error("Internal error: Trying to add new column by reference but tl is full; setalloccol should have run first at R level before getting to this point in dogroups"); // # nocov + if (TRUELENGTH(dt) < INTEGER(lhs)[j]) error(_("Internal error: Trying to add new column by reference but tl is full; setalloccol should have run first at R level before getting to this point in dogroups")); // # nocov target = PROTECT(allocNAVectorLike(RHS, LENGTH(VECTOR_ELT(dt,0)))); // Even if we could know reliably to switch from allocNAVectorLike to allocVector for slight speedup, user code could still // contain a switched halt, and in that case we'd want the groups not yet done to have NA rather than 0 or uninitialized. @@ -316,14 +316,14 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX const char *warn = memrecycle(target, order, INTEGER(starts)[i]-1, grpn, RHS, 0, ""); // can't error here because length mismatch already checked for all jval columns before starting to add any new columns if (warn) - warning("Group %d column '%s': %s", i+1, CHAR(STRING_ELT(dtnames,INTEGER(lhs)[j]-1)), warn); + warning(_("Group %d column '%s': %s"), i+1, CHAR(STRING_ELT(dtnames,INTEGER(lhs)[j]-1)), warn); } UNPROTECT(1); // jval continue; } maxn = 0; if (njval==0) njval = LENGTH(jval); // for first group, then the rest (when non 0) must conform to the first >0 group - if (njval!=LENGTH(jval)) error("j doesn't evaluate to the same number of columns for each group"); // this would be a problem even if we unlisted afterwards. This way the user finds out earlier though so he can fix and rerun sooner. + if (njval!=LENGTH(jval)) error(_("j doesn't evaluate to the same number of columns for each group")); // this would be a problem even if we unlisted afterwards. This way the user finds out earlier though so he can fix and rerun sooner. for (int j=0; jmaxn ? k : maxn; @@ -357,12 +357,12 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX for(int j=0; j1) { // maxn==1 in tests 172,280,281,282,403,405 and 406 - warning("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.", j+1, i+1, maxn); + warning(_("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."), j+1, i+1, maxn); NullWarnDone = TRUE; } writeNA(target, thisansloc, maxn); } else { // thislen>0 if (TYPEOF(source) != TYPEOF(target)) - error("Column %d of result for group %d is type '%s' but expecting type '%s'. Column types must be consistent for each group.", j+1, i+1, type2char(TYPEOF(source)), type2char(TYPEOF(target))); + error(_("Column %d of result for group %d is type '%s' but expecting type '%s'. Column types must be consistent for each group."), j+1, i+1, type2char(TYPEOF(source)), type2char(TYPEOF(target))); if (thislen>1 && thislen!=maxn && grpn>0) { // grpn>0 for grouping empty tables; test 1986 - error("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.", thislen, j+1, i+1, maxn); + error(_("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."), thislen, j+1, i+1, maxn); } memrecycle(target, R_NilValue, thisansloc, maxn, source, 0, ""); } @@ -440,7 +440,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX } if (isNull(lhs) && ans!=NULL) { if (ansloc < LENGTH(VECTOR_ELT(ans,0))) { - if (LOGICAL(verbose)[0]) Rprintf("Wrote less rows (%d) than allocated (%d).\n",ansloc,LENGTH(VECTOR_ELT(ans,0))); + if (LOGICAL(verbose)[0]) Rprintf(_("Wrote less rows (%d) than allocated (%d).\n"),ansloc,LENGTH(VECTOR_ELT(ans,0))); for (int j=0; j0; - Rprintf("\n %s took %.3fs for %d groups\n", w ? "collecting discontiguous groups" : "memcpy contiguous groups", + Rprintf(_("\n %s took %.3fs for %d groups\n"), w ? "collecting discontiguous groups" : "memcpy contiguous groups", 1.0*tblock[w]/CLOCKS_PER_SEC, nblock[w]); - Rprintf(" eval(j) took %.3fs for %d calls\n", 1.0*tblock[2]/CLOCKS_PER_SEC, nblock[2]); + Rprintf(_(" eval(j) took %.3fs for %d calls\n"), 1.0*tblock[2]/CLOCKS_PER_SEC, nblock[2]); } UNPROTECT(nprotect); return(ans); @@ -478,7 +478,7 @@ SEXP growVector(SEXP x, R_len_t newlen) // * much shorter and faster SEXP newx; R_len_t i, len = length(x); - if (isNull(x)) error("growVector passed NULL"); + if (isNull(x)) error(_("growVector passed NULL")); PROTECT(newx = allocVector(TYPEOF(x), newlen)); // TO DO: R_realloc(?) here? if (newlen < len) len=newlen; // i.e. shrink switch (TYPEOF(x)) { @@ -495,7 +495,7 @@ SEXP growVector(SEXP x, R_len_t newlen) default : memcpy((char *)DATAPTR(newx), (char *)DATAPTR(x), len*SIZEOF(x)); // SIZEOF() returns size_t (just as sizeof()) so * shouldn't overflow // TODO remove DATAPTR } - // if (verbose) Rprintf("Growing vector from %d to %d items of type '%s'\n", len, newlen, type2char(TYPEOF(x))); + // if (verbose) Rprintf(_("Growing vector from %d to %d items of type '%s'\n"), len, newlen, type2char(TYPEOF(x))); // Would print for every column if here. Now just up in dogroups (one msg for each table grow). keepattr(newx,x); UNPROTECT(1); @@ -547,4 +547,3 @@ SEXP growVector(SEXP x, R_len_t newlen) // > system.time(dt[, list(list(y)), by=x]) // user system elapsed // 30.827 0.239 32.306 - diff --git a/src/fastmean.c b/src/fastmean.c index fedcfe2acd..75c6c033ce 100644 --- a/src/fastmean.c +++ b/src/fastmean.c @@ -36,13 +36,13 @@ SEXP fastmean(SEXP args) if (length(args)>2) { tmp = CADDR(args); if (!isLogical(tmp) || LENGTH(tmp)!=1 || LOGICAL(tmp)[0]==NA_LOGICAL) - error("narm should be TRUE or FALSE"); // # nocov ; [.data.table should construct the .External call correctly + error(_("narm should be TRUE or FALSE")); // # nocov ; [.data.table should construct the .External call correctly narm=LOGICAL(tmp)[0]; } PROTECT(ans = allocNAVector(REALSXP, 1)); copyMostAttrib(x, ans); if (!isInteger(x) && !isReal(x) && !isLogical(x)) { - error("fastmean was passed type %s, not numeric or logical", type2char(TYPEOF(x))); + error(_("fastmean was passed type %s, not numeric or logical"), type2char(TYPEOF(x))); } l = LENGTH(x); if (narm) { @@ -80,7 +80,7 @@ SEXP fastmean(SEXP args) REAL(ans)[0] = (double) s; break; default: - error("Internal error: type '%s' not caught earlier in fastmean", type2char(TYPEOF(x))); // # nocov + error(_("Internal error: type '%s' not caught earlier in fastmean"), type2char(TYPEOF(x))); // # nocov } } else { // narm==FALSE switch(TYPEOF(x)) { @@ -108,7 +108,7 @@ SEXP fastmean(SEXP args) REAL(ans)[0] = (double) s; break; default: - error("Internal error: type '%s' not caught earlier in fastmean", type2char(TYPEOF(x))); // # nocov + error(_("Internal error: type '%s' not caught earlier in fastmean"), type2char(TYPEOF(x))); // # nocov } } UNPROTECT(1); diff --git a/src/fcast.c b/src/fcast.c index 991689ee84..ff8c98fc7b 100644 --- a/src/fcast.c +++ b/src/fcast.c @@ -77,7 +77,7 @@ SEXP fcast(SEXP lhs, SEXP val, SEXP nrowArg, SEXP ncolArg, SEXP idxArg, SEXP fil } } break; - default: error("Unsupported column type in fcast val: '%s'", type2char(TYPEOF(thiscol))); // #nocov + default: error(_("Unsupported column type in fcast val: '%s'"), type2char(TYPEOF(thiscol))); // #nocov } UNPROTECT(nprotect); } @@ -94,7 +94,7 @@ SEXP fcast(SEXP lhs, SEXP val, SEXP nrowArg, SEXP ncolArg, SEXP idxArg, SEXP fil // SEXP zero_init(R_len_t n) { // R_len_t i; // SEXP ans; -// if (n < 0) error("Input argument 'n' to 'zero_init' must be >= 0"); +// if (n < 0) error(_("Input argument 'n' to 'zero_init' must be >= 0")); // ans = PROTECT(allocVector(INTSXP, n)); // for (i=0; i 0"); +// if (!isNewList(s) || isNull(s)) error(_("Argument 's' to 'cross_join' must be a list of length > 0")); // PROTECT(call = lang3(install("do.call"), install("CJ"), s)); // r = eval(call, env); // UNPROTECT(1); @@ -130,7 +130,7 @@ SEXP fcast(SEXP lhs, SEXP val, SEXP nrowArg, SEXP ncolArg, SEXP idxArg, SEXP fil // SEXP diff_int(SEXP x, R_len_t n) { // R_len_t i; // SEXP ans; -// if (TYPEOF(x) != INTSXP) error("Argument 'x' to 'diff_int' must be an integer vector"); +// if (TYPEOF(x) != INTSXP) error(_("Argument 'x' to 'diff_int' must be an integer vector")); // ans = PROTECT(allocVector(INTSXP, length(x))); // for (i=1; i= 1 // for (i=0; i1 ? INT64_MAX : 0; // for scalar 'a' bitwise AND will reset iterator to first element: pa[i & amask] -> pa[0] const int64_t bmask = len2>1 ? INT64_MAX : 0; @@ -48,19 +48,19 @@ SEXP fifelseR(SEXP l, SEXP a, SEXP b, SEXP na) { bool nonna = !isNull(na); if (nonna) { if (xlength(na) != 1) - error("Length of 'na' is %lld but must be 1", xlength(na)); + error(_("Length of 'na' is %lld but must be 1"), xlength(na)); SEXPTYPE tn = TYPEOF(na); if (tn == LGLSXP && LOGICAL(na)[0]==NA_LOGICAL) { nonna = false; } else { if (tn != ta) - error("'yes' is of type %s but 'na' is of type %s. Please make sure that both arguments have the same type.", type2char(ta), type2char(tn)); + error(_("'yes' is of type %s but 'na' is of type %s. Please make sure that both arguments have the same type."), type2char(ta), type2char(tn)); if (!R_compute_identical(PROTECT(getAttrib(a,R_ClassSymbol)), PROTECT(getAttrib(na,R_ClassSymbol)), 0)) - error("'yes' has different class than 'na'. Please make sure that both arguments have the same class."); + error(_("'yes' has different class than 'na'. Please make sure that both arguments have the same class.")); UNPROTECT(2); if (isFactor(a)) { if (!R_compute_identical(PROTECT(getAttrib(a,R_LevelsSymbol)), PROTECT(getAttrib(na,R_LevelsSymbol)), 0)) - error("'yes' and 'na' are both type factor but their levels are different."); + error(_("'yes' and 'na' are both type factor but their levels are different.")); UNPROTECT(2); } } @@ -130,7 +130,7 @@ SEXP fifelseR(SEXP l, SEXP a, SEXP b, SEXP na) { } } break; default: - error("Type %s is not supported.", type2char(ta)); + error(_("Type %s is not supported."), type2char(ta)); } SEXP l_names = PROTECT(getAttrib(l, R_NamesSymbol)); nprotect++; diff --git a/src/fmelt.c b/src/fmelt.c index d4a9112a84..896f7e8b1c 100644 --- a/src/fmelt.c +++ b/src/fmelt.c @@ -15,8 +15,8 @@ SEXP seq_int(int n, int start) { // very specific "set_diff" for integers SEXP set_diff(SEXP x, int n) { - if (TYPEOF(x) != INTSXP) error("'x' must be an integer"); - if (n <= 0) error("'n' must be a positive integer"); + if (TYPEOF(x) != INTSXP) error(_("'x' must be an integer")); + if (n <= 0) error(_("'n' must be a positive integer")); SEXP table = PROTECT(seq_int(n, 1)); // TODO: using match to 1:n seems odd here, why use match at all SEXP xmatch = PROTECT(match(x, table, 0)); // Old comment:took a while to realise: matches vec against x - thanks to comment from Matt in assign.c! const int *ixmatch = INTEGER(xmatch); @@ -38,7 +38,7 @@ SEXP which(SEXP x, Rboolean val) { int j=0, n = length(x); SEXP ans; - if (!isLogical(x)) error("Argument to 'which' must be logical"); + if (!isLogical(x)) error(_("Argument to 'which' must be logical")); const int *ix = LOGICAL(x); int *buf = (int *) R_alloc(n, sizeof(int)); for (int i=0; i= 0"); + if (TYPEOF(vec) != STRSXP) error(_("concat: 'vec must be a character vector")); + if (!isInteger(idx) || length(idx) < 0) error(_("concat: 'idx' must be an integer vector of length >= 0")); const int *iidx = INTEGER(idx); for (int i=0; i length(vec)) - error("concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= length(vec)"); + error(_("concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= length(vec)")); } PROTECT(v = allocVector(STRSXP, nidx > 5 ? 5 : nidx)); for (int i=0; i ncol) - error("One or more values in 'id.vars' is invalid."); + error(_("One or more values in 'id.vars' is invalid.")); else if (!LOGICAL(booltmp)[i]) targetcols++; else continue; } @@ -172,8 +172,8 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { SET_VECTOR_ELT(valuecols, 0, tmp2); idcols = tmp; if (verbose) { - Rprintf("'measure.vars' is missing. Assigning all columns other than 'id.vars' columns as 'measure.vars'.\n"); - if (length(tmp2)) Rprintf("Assigned 'measure.vars' are [%s].\n", CHAR(STRING_ELT(concat(dtnames, tmp2), 0))); + Rprintf(_("'measure.vars' is missing. Assigning all columns other than 'id.vars' columns as 'measure.vars'.\n")); + if (length(tmp2)) Rprintf(_("Assigned 'measure.vars' are [%s].\n"), CHAR(STRING_ELT(concat(dtnames, tmp2), 0))); } } else if (isNull(id) && !isNull(measure)) { switch(TYPEOF(measure)) { @@ -181,7 +181,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { case REALSXP : tmp2 = PROTECT(coerceVector(measure, INTSXP)); protecti++; break; case INTSXP : tmp2 = measure; break; case VECSXP : tmp2 = PROTECT(measurelist(measure, dtnames)); protecti++; break; - default : error("Unknown 'measure.vars' type %s, must be character or integer vector/list", type2char(TYPEOF(measure))); + default : error(_("Unknown 'measure.vars' type %s, must be character or integer vector/list"), type2char(TYPEOF(measure))); } tmp = tmp2; if (isNewList(measure)) { @@ -190,7 +190,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { booltmp = PROTECT(duplicated(tmp, FALSE)); protecti++; for (i=0; i ncol) - error("One or more values in 'measure.vars' is invalid."); + error(_("One or more values in 'measure.vars' is invalid.")); else if (!LOGICAL(booltmp)[i]) targetcols++; else continue; } @@ -208,19 +208,19 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { SET_VECTOR_ELT(valuecols, 0, tmp2); } if (verbose) { - Rprintf("'id.vars' is missing. Assigning all columns other than 'measure.vars' columns as 'id.vars'.\n"); - if (length(idcols)) Rprintf("Assigned 'id.vars' are [%s].\n", CHAR(STRING_ELT(concat(dtnames, idcols), 0))); + Rprintf(_("'id.vars' is missing. Assigning all columns other than 'measure.vars' columns as 'id.vars'.\n")); + if (length(idcols)) Rprintf(_("Assigned 'id.vars' are [%s].\n"), CHAR(STRING_ELT(concat(dtnames, idcols), 0))); } } else if (!isNull(id) && !isNull(measure)) { switch(TYPEOF(id)) { case STRSXP : tmp = PROTECT(chmatch(id, dtnames, 0)); protecti++; break; case REALSXP : tmp = PROTECT(coerceVector(id, INTSXP)); protecti++; break; case INTSXP : tmp = id; break; - default : error("Unknown 'id.vars' type %s, must be character or integer vector", type2char(TYPEOF(id))); + default : error(_("Unknown 'id.vars' type %s, must be character or integer vector"), type2char(TYPEOF(id))); } for (i=0; i ncol) - error("One or more values in 'id.vars' is invalid."); + error(_("One or more values in 'id.vars' is invalid.")); } idcols = PROTECT(tmp); protecti++; switch(TYPEOF(measure)) { @@ -228,7 +228,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { case REALSXP : tmp2 = PROTECT(coerceVector(measure, INTSXP)); protecti++; break; case INTSXP : tmp2 = measure; break; case VECSXP : tmp2 = PROTECT(measurelist(measure, dtnames)); protecti++; break; - default : error("Unknown 'measure.vars' type %s, must be character or integer vector", type2char(TYPEOF(measure))); + default : error(_("Unknown 'measure.vars' type %s, must be character or integer vector"), type2char(TYPEOF(measure))); } tmp = tmp2; if (isNewList(measure)) { @@ -236,7 +236,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { } for (i=0; i ncol) - error("One or more values in 'measure.vars' is invalid."); + error(_("One or more values in 'measure.vars' is invalid.")); } if (isNewList(measure)) valuecols = tmp2; else { @@ -273,11 +273,11 @@ static void preprocess(SEXP DT, SEXP id, SEXP measure, SEXP varnames, SEXP valna data->lvalues = length(data->valuecols); data->narm = narm; if (length(valnames) != data->lvalues) { - if (isNewList(measure)) error("When 'measure.vars' is a list, 'value.name' must be a character vector of length =1 or =length(measure.vars)."); - else error("When 'measure.vars' is either not specified or a character/integer vector, 'value.name' must be a character vector of length =1."); + if (isNewList(measure)) error(_("When 'measure.vars' is a list, 'value.name' must be a character vector of length =1 or =length(measure.vars).")); + else error(_("When 'measure.vars' is either not specified or a character/integer vector, 'value.name' must be a character vector of length =1.")); } if (length(varnames) != 1) - error("'variable.name' must be a character/integer vector of length=1."); + error(_("'variable.name' must be a character/integer vector of length=1.")); data->leach = (int *)R_alloc(data->lvalues, sizeof(int)); data->isidentical = (int *)R_alloc(data->lvalues, sizeof(int)); data->isfactor = (int *)R_alloc(data->lvalues, sizeof(int)); @@ -326,10 +326,10 @@ static SEXP combineFactorLevels(SEXP factorLevels, SEXP target, int * factorType int maxlevels=0, nitem=length(factorLevels); for (int i=0; ilvalues; ++i) { SEXP thisvaluecols = VECTOR_ELT(data->valuecols, i); if (!data->isidentical[i]) - warning("'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", CHAR(STRING_ELT(concat(dtnames, thisvaluecols), 0)), type2char(data->maxtype[i]), type2char(data->maxtype[i])); + warning(_("'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"), CHAR(STRING_ELT(concat(dtnames, thisvaluecols), 0)), type2char(data->maxtype[i]), type2char(data->maxtype[i])); if (data->maxtype[i] == VECSXP && data->narm) { - if (verbose) Rprintf("The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n", i+1); + if (verbose) Rprintf(_("The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n"), i+1); data->narm = FALSE; } } @@ -487,7 +487,7 @@ SEXP getvaluecols(SEXP DT, SEXP dtnames, Rboolean valfactor, Rboolean verbose, s } } break; default : - error("Unknown column type '%s' for column '%s'.", type2char(TYPEOF(thiscol)), CHAR(STRING_ELT(dtnames, INTEGER(thisvaluecols)[i]-1))); + error(_("Unknown column type '%s' for column '%s'."), type2char(TYPEOF(thiscol)), CHAR(STRING_ELT(dtnames, INTEGER(thisvaluecols)[i]-1))); } if (data->narm) counter += thislen; UNPROTECT(thisprotecti); // inside inner loop (note that it's double loop) so as to limit use of protection stack @@ -511,7 +511,7 @@ SEXP getvarcols(SEXP DT, SEXP dtnames, Rboolean varfactor, Rboolean verbose, str SEXP ansvars=PROTECT(allocVector(VECSXP, 1)); protecti++; SEXP target; if (data->lvalues==1 && length(VECTOR_ELT(data->valuecols, 0)) != data->lmax) - error("Internal error: fmelt.c:getvarcols %d %d", length(VECTOR_ELT(data->valuecols, 0)), data->lmax); // # nocov + error(_("Internal error: fmelt.c:getvarcols %d %d"), length(VECTOR_ELT(data->valuecols, 0)), data->lmax); // # nocov if (!varfactor) { SET_VECTOR_ELT(ansvars, 0, target=allocVector(STRSXP, data->totlen)); if (data->lvalues == 1) { @@ -659,7 +659,7 @@ SEXP getidcols(SEXP DT, SEXP dtnames, Rboolean verbose, struct processData *data } } break; - default : error("Unknown column type '%s' for column '%s' in 'data'", type2char(TYPEOF(thiscol)), CHAR(STRING_ELT(dtnames, INTEGER(data->idcols)[i]-1))); + default : error(_("Unknown column type '%s' for column '%s' in 'data'"), type2char(TYPEOF(thiscol)), CHAR(STRING_ELT(dtnames, INTEGER(data->idcols)[i]-1))); } } UNPROTECT(1); @@ -670,21 +670,21 @@ SEXP fmelt(SEXP DT, SEXP id, SEXP measure, SEXP varfactor, SEXP valfactor, SEXP SEXP dtnames, ansvals, ansvars, ansids, ansnames, ans; Rboolean narm=FALSE, verbose=FALSE; - if (!isNewList(DT)) error("Input is not of type VECSXP, expected a data.table, data.frame or list"); - if (!isLogical(valfactor)) error("Argument 'value.factor' should be logical TRUE/FALSE"); - if (!isLogical(varfactor)) error("Argument 'variable.factor' should be logical TRUE/FALSE"); - if (!isLogical(narmArg)) error("Argument 'na.rm' should be logical TRUE/FALSE."); - if (!isString(varnames)) error("Argument 'variable.name' must be a character vector"); - if (!isString(valnames)) error("Argument 'value.name' must be a character vector"); - if (!isLogical(verboseArg)) error("Argument 'verbose' should be logical TRUE/FALSE"); + if (!isNewList(DT)) error(_("Input is not of type VECSXP, expected a data.table, data.frame or list")); + if (!isLogical(valfactor)) error(_("Argument 'value.factor' should be logical TRUE/FALSE")); + if (!isLogical(varfactor)) error(_("Argument 'variable.factor' should be logical TRUE/FALSE")); + if (!isLogical(narmArg)) error(_("Argument 'na.rm' should be logical TRUE/FALSE.")); + if (!isString(varnames)) error(_("Argument 'variable.name' must be a character vector")); + if (!isString(valnames)) error(_("Argument 'value.name' must be a character vector")); + if (!isLogical(verboseArg)) error(_("Argument 'verbose' should be logical TRUE/FALSE")); int ncol = LENGTH(DT); if (!ncol) { - if (verbose) Rprintf("ncol(data) is 0. Nothing to melt. Returning original data.table."); + if (verbose) Rprintf(_("ncol(data) is 0. Nothing to melt. Returning original data.table.")); return(DT); } int protecti=0; dtnames = PROTECT(getAttrib(DT, R_NamesSymbol)); protecti++; - if (isNull(dtnames)) error("names(data) is NULL. Please report to data.table-help"); + if (isNull(dtnames)) error(_("names(data) is NULL. Please report to data.table-help")); if (LOGICAL(narmArg)[0] == TRUE) narm = TRUE; if (LOGICAL(verboseArg)[0] == TRUE) verbose = TRUE; struct processData data; diff --git a/src/forder.c b/src/forder.c index 2e86d7b84c..e1a50257ac 100644 --- a/src/forder.c +++ b/src/forder.c @@ -64,7 +64,7 @@ static char msg[1001]; * We have to trap on exit anyway to call savetl_end(). * NB: R_alloc() would be more convenient (fails within) and robust (auto free) but there is no R_realloc(). Implementing R_realloc() would be an alloc and copy, iiuc. * Calloc/Realloc needs to be Free'd, even before error() [R-exts$6.1.2]. An oom within Calloc causes a previous Calloc to leak so Calloc would still needs to be trapped anyway. - * Therefore, using <> approach to cleanup() on error. + * Therefore, using <> approach to cleanup() on error. */ static void free_ustr() { @@ -103,7 +103,7 @@ static void push(const int *x, const int n) { if (gs_thread_alloc[me] < newn) { gs_thread_alloc[me] = (newn < nrow/3) ? (1+(newn*2)/4096)*4096 : nrow; // [2|3] to not overflow and 3 not 2 to avoid allocating close to nrow (nrow groups occurs when all size 1 groups) gs_thread[me] = realloc(gs_thread[me], gs_thread_alloc[me]*sizeof(int)); - if (gs_thread[me]==NULL) STOP("Failed to realloc thread private group size buffer to %d*4bytes", (int)gs_thread_alloc[me]); + if (gs_thread[me]==NULL) STOP(_("Failed to realloc thread private group size buffer to %d*4bytes"), (int)gs_thread_alloc[me]); } memcpy(gs_thread[me]+gs_thread_n[me], x, n*sizeof(int)); gs_thread_n[me] += n; @@ -117,7 +117,7 @@ static void flush() { if (gs_alloc < newn) { gs_alloc = (newn < nrow/3) ? (1+(newn*2)/4096)*4096 : nrow; gs = realloc(gs, gs_alloc*sizeof(int)); - if (gs==NULL) STOP("Failed to realloc group size result to %d*4bytes", (int)gs_alloc); + if (gs==NULL) STOP(_("Failed to realloc group size result to %d*4bytes"), (int)gs_alloc); } memcpy(gs+gs_n, gs_thread[me], n*sizeof(int)); gs_n += n; @@ -260,7 +260,7 @@ static void cradix_r(SEXP *xsub, int n, int radix) memset(thiscounts, 0, 256*sizeof(int)); return; } - if (thiscounts[0] != 0) STOP("Logical error. counts[0]=%d in cradix but should have been decremented to 0. radix=%d", thiscounts[0], radix); + if (thiscounts[0] != 0) STOP(_("Logical error. counts[0]=%d in cradix but should have been decremented to 0. radix=%d"), thiscounts[0], radix); itmp = 0; for (int i=1; i<256; i++) { if (thiscounts[i] == 0) continue; @@ -275,9 +275,9 @@ static void cradix_r(SEXP *xsub, int n, int radix) static void cradix(SEXP *x, int n) { cradix_counts = (int *)calloc(ustr_maxlen*256, sizeof(int)); // counts for the letters of left-aligned strings - if (!cradix_counts) STOP("Failed to alloc cradix_counts"); + if (!cradix_counts) STOP(_("Failed to alloc cradix_counts")); cradix_xtmp = (SEXP *)malloc(ustr_n*sizeof(SEXP)); - if (!cradix_xtmp) STOP("Failed to alloc cradix_tmp"); + if (!cradix_xtmp) STOP(_("Failed to alloc cradix_tmp")); cradix_r(x, n, 0); free(cradix_counts); cradix_counts=NULL; free(cradix_xtmp); cradix_xtmp=NULL; @@ -288,8 +288,8 @@ static void range_str(SEXP *x, int n, uint64_t *out_min, uint64_t *out_max, int { int na_count=0; bool anyneedutf8=false; - if (ustr_n!=0) STOP("Internal error: ustr isn't empty when starting range_str: ustr_n=%d, ustr_alloc=%d", ustr_n, ustr_alloc); // # nocov - if (ustr_maxlen!=0) STOP("Internal error: ustr_maxlen isn't 0 when starting range_str"); // # nocov + if (ustr_n!=0) STOP(_("Internal error: ustr isn't empty when starting range_str: ustr_n=%d, ustr_alloc=%d"), ustr_n, ustr_alloc); // # nocov + if (ustr_maxlen!=0) STOP(_("Internal error: ustr_maxlen isn't 0 when starting range_str")); // # nocov // savetl_init() has already been called at the start of forder #pragma omp parallel for num_threads(getDTthreads()) for(int i=0; in) ustr_alloc = n; // clamp at n. Reaches n when fully unique (no dups) ustr = realloc(ustr, ustr_alloc * sizeof(SEXP)); - if (ustr==NULL) STOP("Unable to realloc %d * %d bytes in range_str", ustr_alloc, (int)sizeof(SEXP)); // # nocov + if (ustr==NULL) STOP(_("Unable to realloc %d * %d bytes in range_str"), ustr_alloc, sizeof(SEXP)); // # nocov } ustr[ustr_n++] = s; SET_TRUELENGTH(s, -ustr_n); // unique in any order is fine. first-appearance order is achieved later in count_group @@ -327,7 +327,7 @@ static void range_str(SEXP *x, int n, uint64_t *out_min, uint64_t *out_max, int SEXP ustr2 = PROTECT(allocVector(STRSXP, ustr_n)); for (int i=0; i 2) error("Must be 2, 1 or 0"); + if (!isInteger(droundArg) || LENGTH(droundArg)!=1) error(_("Must an integer or numeric vector length 1")); + if (INTEGER(droundArg)[0] < 0 || INTEGER(droundArg)[0] > 2) error(_("Must be 2, 1 or 0")); dround = INTEGER(droundArg)[0]; dmask = dround ? 1 << (8*dround-1) : 0; return R_NilValue; @@ -409,7 +409,7 @@ uint64_t dtwiddle(void *p, int i) } if (ISNAN(u.d)) return ISNA(u.d) ? 0 /*NA*/ : 1 /*NaN*/; // also normalises a difference between NA on 32bit R (bit 13 set) and 64bit R (bit 13 not set) if (isinf(u.d)) return signbit(u.d) ? 2 /*-Inf*/ : (0xffffffffffffffff>>(dround*8)) /*+Inf*/; - STOP("Unknown non-finite value; not NA, NaN, -Inf or +Inf"); // # nocov + STOP(_("Unknown non-finite value; not NA, NaN, -Inf or +Inf")); // # nocov } void radix_r(const int from, const int to, const int radix); @@ -431,13 +431,13 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (!isNewList(DT)) { if (!isVectorAtomic(DT)) - STOP("Internal error: input is not either a list of columns, or an atomic vector."); // # nocov; caught by colnamesInt at R level, test 1962.0472 + STOP(_("Internal error: input is not either a list of columns, or an atomic vector.")); // # nocov; caught by colnamesInt at R level, test 1962.0472 if (!isNull(by)) - STOP("Internal error: input is an atomic vector (not a list of columns) but by= is not NULL"); // # nocov; caught at R level, test 1962.043 + STOP(_("Internal error: input is an atomic vector (not a list of columns) but by= is not NULL")); // # nocov; caught at R level, test 1962.043 if (!isInteger(ascArg) || LENGTH(ascArg)!=1) - STOP("Input is an atomic vector (not a list of columns) but order= is not a length 1 integer"); + STOP(_("Input is an atomic vector (not a list of columns) but order= is not a length 1 integer")); if (verbose) - Rprintf("forder.c received a vector type '%s' length %d\n", type2char(TYPEOF(DT)), length(DT)); + Rprintf(_("forder.c received a vector type '%s' length %d\n"), type2char(TYPEOF(DT)), length(DT)); SEXP tt = PROTECT(allocVector(VECSXP, 1)); n_protect++; SET_VECTOR_ELT(tt, 0, DT); DT = tt; @@ -445,34 +445,34 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S INTEGER(by)[0] = 1; } else { if (verbose) - Rprintf("forder.c received %d rows and %d columns\n", length(VECTOR_ELT(DT,0)), length(DT)); + Rprintf(_("forder.c received %d rows and %d columns\n"), length(VECTOR_ELT(DT,0)), length(DT)); } if (!length(DT)) - STOP("Internal error: DT is an empty list() of 0 columns"); // # nocov should have been caught be colnamesInt, test 2099.1 + STOP(_("Internal error: DT is an empty list() of 0 columns")); // # nocov should have been caught be colnamesInt, test 2099.1 if (!isInteger(by) || !LENGTH(by)) - STOP("Internal error: DT has %d columns but 'by' is either not integer or is length 0", length(DT)); // # nocov colnamesInt catches, 2099.2 + STOP(_("Internal error: DT has %d columns but 'by' is either not integer or is length 0"), length(DT)); // # nocov colnamesInt catches, 2099.2 if (!isInteger(ascArg) || LENGTH(ascArg)!=LENGTH(by)) - STOP("Either order= is not integer or its length (%d) is different to by='s length (%d)", LENGTH(ascArg), LENGTH(by)); + STOP(_("Either order= is not integer or its length (%d) is different to by='s length (%d)"), LENGTH(ascArg), LENGTH(by)); nrow = length(VECTOR_ELT(DT,0)); int n_cplx = 0; for (int i=0; i length(DT)) - STOP("internal error: 'by' value %d out of range [1,%d]", by_i, length(DT)); // # nocov # R forderv already catch that using C colnamesInt + STOP(_("internal error: 'by' value %d out of range [1,%d]"), by_i, length(DT)); // # nocov # R forderv already catch that using C colnamesInt if ( nrow != length(VECTOR_ELT(DT, by_i-1)) ) - STOP("Column %d is length %d which differs from length of column 1 (%d)\n", INTEGER(by)[i], length(VECTOR_ELT(DT, INTEGER(by)[i]-1)), nrow); + STOP(_("Column %d is length %d which differs from length of column 1 (%d)\n"), INTEGER(by)[i], length(VECTOR_ELT(DT, INTEGER(by)[i]-1)), nrow); if (TYPEOF(VECTOR_ELT(DT, by_i-1)) == CPLXSXP) n_cplx++; } if (!isLogical(retGrpArg) || LENGTH(retGrpArg)!=1 || INTEGER(retGrpArg)[0]==NA_LOGICAL) - STOP("retGrp= must be TRUE or FALSE"); + STOP(_("retGrp must be TRUE or FALSE")); retgrp = LOGICAL(retGrpArg)[0]==TRUE; if (!isLogical(sortGroupsArg) || LENGTH(sortGroupsArg)!=1 || INTEGER(sortGroupsArg)[0]==NA_LOGICAL ) - STOP("sort= must be TRUE or FALSE"); + STOP(_("sort must be TRUE or FALSE")); sortType = LOGICAL(sortGroupsArg)[0]==TRUE; // if sortType is 1, it is later flipped between +1/-1 according to ascArg. Otherwise ascArg is ignored when sortType==0 if (!retgrp && !sortType) - STOP("At least one of retGrp= or sort= must be TRUE"); + STOP(_("At least one of retGrp= or sort= must be TRUE")); if (!isLogical(naArg) || LENGTH(naArg) != 1) - STOP("na.last must be logical TRUE, FALSE or NA of length 1"); + STOP(_("na.last must be logical TRUE, FALSE or NA of length 1")); nalast = (LOGICAL(naArg)[0] == NA_LOGICAL) ? -1 : LOGICAL(naArg)[0]; // 1=na last, 0=na first (default), -1=remove na if (nrow==0) { @@ -509,16 +509,16 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (n_cplx) { CplxPart=PROTECT(allocVector(REALSXP, nrow)); n_protect++; } // one alloc is reused for each part TEND(2); for (int col=0; col0 && min==max && na_count==0 && infnan_count==0)) { @@ -569,7 +569,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S } uint64_t range = max-min+1 +1/*NA*/ +isReal*3/*NaN, -Inf, +Inf*/; - // Rprintf("range=%llu min=%llu max=%llu na_count==%d\n", range, min, max, na_count); + // Rprintf(_("range=%llu min=%llu max=%llu na_count==%d\n"), range, min, max, na_count); int maxBit=0; while (range) { maxBit++; range>>=1; } @@ -622,7 +622,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S const uint64_t naval = ((nalast==1) == asc) ? max+1+isReal*2 : min-1-isReal*2; const uint64_t nanval = ((nalast==1) == asc) ? max+2 : min-2; // only used when isReal - // Rprintf("asc=%d min2=%llu max2=%llu naval==%llu nanval==%llu\n", asc, min2, max2, naval, nanval); + // Rprintf(_("asc=%d min2=%llu max2=%llu naval==%llu nanval==%llu\n"), asc, min2, max2, naval, nanval); // several columns could squash into 1 byte. due to this bit squashing is why we deal // with asc|desc here, otherwise it could be done in the ugrp sorting by reversing the ugrp insert sort @@ -711,26 +711,26 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S free_ustr(); // ustr could be left allocated and reused, but free now in case large and we're tight on ram break; default: - STOP("Internal error: column not supported not caught earlier"); // # nocov + STOP(_("Internal error: column not supported not caught earlier")); // # nocov } nradix += nbyte-1+(spare==0); TEND(4) - // Rprintf("Written key for column %d\n", col); + // Rprintf(_("Written key for column %d\n"), col); } if (key[nradix]!=NULL) nradix++; // nradix now number of bytes in key #ifdef TIMING_ON - Rprintf("nradix=%d\n", nradix); + Rprintf(_("nradix=%d\n"), nradix); #endif int nth = getDTthreads(); TMP = (int *)malloc(nth*UINT16_MAX*sizeof(int)); // used by counting sort (my_n<=65536) in radix_r() UGRP = (uint8_t *)malloc(nth*256); // TODO: align TMP and UGRP to cache lines (and do the same for stack allocations too) - if (!TMP || !UGRP /*|| TMP%64 || UGRP%64*/) STOP("Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d", nth); + if (!TMP || !UGRP /*|| TMP%64 || UGRP%64*/) STOP(_("Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d"), nth); if (retgrp) { gs_thread = calloc(nth, sizeof(int *)); // thread private group size buffers gs_thread_alloc = calloc(nth, sizeof(int)); gs_thread_n = calloc(nth, sizeof(int)); - if (!gs_thread || !gs_thread_alloc || !gs_thread_n) STOP("Could not allocate (very tiny) group size thread buffers"); + if (!gs_thread || !gs_thread_alloc || !gs_thread_n) STOP(_("Could not allocate (very tiny) group size thread buffers")); } if (nradix) { radix_r(0, nrow-1, 0); // top level recursive call: (from, to, radix) @@ -791,10 +791,10 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S int last=NBLOCK-1; while (last>=0 && nblock[last]==0) last--; // remove unused timing slots for (int i=0; i<=last; i++) { - Rprintf("Timing block %2d%s = %8.3f %8d\n", i, (i>=17&&i<=19)?"(*)":" ", tblock[i], nblock[i]); + Rprintf(_("Timing block %2d%s = %8.3f %8d\n"), i, (i>=17&&i<=19)?"(*)":" ", tblock[i], nblock[i]); } for (int i=0; i<=256; i++) { - if (stat[i]) Rprintf("stat[%03d]==%10zd\n", i, stat[i]); + if (stat[i]) Rprintf(_("stat[%03d]==%10zd\n"), i, stat[i]); } } #endif @@ -830,7 +830,7 @@ void radix_r(const int from, const int to, const int radix) { } else if (my_n<=256) { // if (getDTthreads()==1) - // Rprintf("insert clause: radix=%d, my_n=%d, from=%d, to=%d\n", radix, my_n, from, to); + // Rprintf(_("insert clause: radix=%d, my_n=%d, from=%d, to=%d\n"), radix, my_n, from, to); // insert sort with some twists: // i) detects if grouped; if sortType==0 can then skip // ii) keeps group appearance order at byte level to minimize movement @@ -942,7 +942,7 @@ void radix_r(const int from, const int to, const int radix) { return; } else if (my_n<=UINT16_MAX) { // UINT16_MAX==65535 (important not 65536) - // if (getDTthreads()==1) Rprintf("counting clause: radix=%d, my_n=%d\n", radix, my_n); + // if (getDTthreads()==1) Rprintf(_("counting clause: radix=%d, my_n=%d\n"), radix, my_n); uint16_t my_counts[256] = {0}; // Needs to be all-0 on entry. This ={0} initialization should be fast as it's on stack. Otherwise, we have to manage // a stack of counts anyway since this is called recursively and these counts are needed to make the recursive calls. // This thread-private stack alloc has no chance of false sharing and gives omp and compiler best chance. @@ -1050,7 +1050,7 @@ void radix_r(const int from, const int to, const int radix) { uint16_t *counts = calloc(nBatch*256,sizeof(uint16_t)); uint8_t *ugrps = malloc(nBatch*256*sizeof(uint8_t)); int *ngrps = calloc(nBatch ,sizeof(int)); - if (!counts || !ugrps || !ngrps) STOP("Failed to allocate parallel counts. my_n=%d, nBatch=%d", my_n, nBatch); + if (!counts || !ugrps || !ngrps) STOP(_("Failed to allocate parallel counts. my_n=%d, nBatch=%d"), my_n, nBatch); bool skip=true; const int n_rem = nradix-radix-1; // how many radix are remaining after this one @@ -1159,6 +1159,7 @@ void radix_r(const int from, const int to, const int radix) { TEND(18 + notFirst*3) if (!skip) { int *TMP = malloc(my_n * sizeof(int)); + if (!TMP) STOP(_("Unable to allocate TMP for my_n=%d items in parallel batch counting"), my_n); if (!TMP) STOP("Unable to allocate TMP for my_n=%d items in parallel batch counting", my_n); #pragma omp parallel for num_threads(getDTthreads()) for (int batch=0; batch FALSE - if (!isInteger(nrowArg) || LENGTH(nrowArg)!=1) error("nrow must be integer vector length 1"); + if (!isInteger(nrowArg) || LENGTH(nrowArg)!=1) error(_("nrow must be integer vector length 1")); const int nrow = INTEGER(nrowArg)[0]; - if (nrow<0) error("nrow==%d but must be >=0", nrow); + if (nrow<0) error(_("nrow==%d but must be >=0"), nrow); const int *xd = INTEGER(x), xlen=LENGTH(x); for (int i=0, last=INT_MIN; iLENGTH(x)) - error("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]", i+1, elem, LENGTH(x)); + error(_("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]"), i+1, elem, LENGTH(x)); if (!n) n = length(VECTOR_ELT(x, elem-1)); } SEXP ans = PROTECT(allocVector(LGLSXP, n)); @@ -23,7 +23,7 @@ SEXP dt_na(SEXP x, SEXP cols) { SEXP v = VECTOR_ELT(x, INTEGER(cols)[i]-1); if (!length(v) || isNewList(v) || isList(v)) continue; // like stats:::na.omit.data.frame, skip list/pairlist columns if (n != length(v)) - error("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d.", i+1,length(v),n); + error(_("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d."), i+1,length(v),n); switch (TYPEOF(v)) { case LGLSXP: { const int *iv = LOGICAL(v); @@ -62,7 +62,7 @@ SEXP dt_na(SEXP x, SEXP cols) { } break; default: - error("Unsupported column type '%s'", type2char(TYPEOF(v))); + error(_("Unsupported column type '%s'"), type2char(TYPEOF(v))); } } UNPROTECT(1); @@ -80,7 +80,7 @@ SEXP frank(SEXP xorderArg, SEXP xstartArg, SEXP xlenArg, SEXP ties_method) { else if (!strcmp(CHAR(STRING_ELT(ties_method, 0)), "dense")) ties = DENSE; else if (!strcmp(CHAR(STRING_ELT(ties_method, 0)), "sequence")) ties = SEQUENCE; // else if (!strcmp(CHAR(STRING_ELT(ties_method, 0)), "runlength")) ties = RUNLENGTH; - else error("Internal error: invalid ties.method for frankv(), should have been caught before. please report to data.table issue tracker"); // # nocov + else error(_("Internal error: invalid ties.method for frankv(), should have been caught before. please report to data.table issue tracker")); // # nocov n = length(xorderArg); SEXP ans = (ties == MEAN) ? PROTECT(allocVector(REALSXP, n)) : PROTECT(allocVector(INTSXP, n)); int *ians = INTEGER(ans); @@ -127,7 +127,7 @@ SEXP frank(SEXP xorderArg, SEXP xstartArg, SEXP xlenArg, SEXP ties_method) { // INTEGER(ans)[xorder[j]-1] = k++; // } // break; - default: error("Internal error: unknown ties value in frank: %d", ties); // #nocov + default: error(_("Internal error: unknown ties value in frank: %d"), ties); // #nocov } } UNPROTECT(1); @@ -138,12 +138,12 @@ SEXP frank(SEXP xorderArg, SEXP xstartArg, SEXP xlenArg, SEXP ties_method) { SEXP anyNA(SEXP x, SEXP cols) { int i, j, n=0, elem; - if (!isNewList(x)) error("Internal error. Argument 'x' to CanyNA is type '%s' not 'list'", type2char(TYPEOF(x))); // #nocov - if (!isInteger(cols)) error("Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'", type2char(TYPEOF(cols))); // # nocov + if (!isNewList(x)) error(_("Internal error. Argument 'x' to CanyNA is type '%s' not 'list'"), type2char(TYPEOF(x))); // #nocov + if (!isInteger(cols)) error(_("Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'"), type2char(TYPEOF(cols))); // # nocov for (i=0; iLENGTH(x)) - error("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]", i+1, elem, LENGTH(x)); + error(_("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]"), i+1, elem, LENGTH(x)); if (!n) n = length(VECTOR_ELT(x, elem-1)); } SEXP ans = PROTECT(allocVector(LGLSXP, 1)); @@ -152,7 +152,7 @@ SEXP anyNA(SEXP x, SEXP cols) { SEXP v = VECTOR_ELT(x, INTEGER(cols)[i]-1); if (!length(v) || isNewList(v) || isList(v)) continue; // like stats:::na.omit.data.frame, skip list/pairlist columns if (n != length(v)) - error("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d.", i+1,length(v),n); + error(_("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d."), i+1,length(v),n); j=0; switch (TYPEOF(v)) { case LGLSXP: { @@ -199,7 +199,7 @@ SEXP anyNA(SEXP x, SEXP cols) { } break; default: - error("Unsupported column type '%s'", type2char(TYPEOF(v))); + error(_("Unsupported column type '%s'"), type2char(TYPEOF(v))); } if (LOGICAL(ans)[0]) break; } diff --git a/src/fread.c b/src/fread.c index bb885eb088..649c445f2c 100644 --- a/src/fread.c +++ b/src/fread.c @@ -146,10 +146,10 @@ bool freadCleanup(void) // may call freadCleanup(), thus resulting in an infinite loop. #ifdef WIN32 if (!UnmapViewOfFile(mmp)) - DTPRINT("System error %d unmapping view of file\n", GetLastError()); // # nocov + DTPRINT(_("System error %d unmapping view of file\n"), GetLastError()); // # nocov #else if (munmap(mmp, fileSize)) - DTPRINT("System errno %d unmapping file: %s\n", errno, strerror(errno)); // # nocov + DTPRINT(_("System errno %d unmapping file: %s\n"), errno, strerror(errno)); // # nocov #endif mmp = NULL; } @@ -188,7 +188,7 @@ static inline int64_t clamp_szt(int64_t x, int64_t lower, int64_t upper) { * Parameter `limit` cannot exceed 500. * The data might contain % characters. Therefore, careful to ensure that if the msg * is constructed manually (using say snprintf) that warning(), stop() - * and Rprintf() are all called as warning("%s", msg) and not warning(msg). + * and Rprintf() are all called as warning(_("%s"), msg) and not warning(msg). */ static const char* strlim(const char *ch, size_t limit) { static char buf[1002]; @@ -209,7 +209,7 @@ static char *typeLetter = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq static char *typesAsString(int ncol) { int nLetters = strlen(typeLetter); - if (NUMTYPE>nLetters) STOP("Internal error: NUMTYPE(%d) > nLetters(%d)", NUMTYPE, nLetters); // # nocov + if (NUMTYPE>nLetters) STOP(_("Internal error: NUMTYPE(%d) > nLetters(%d)"), NUMTYPE, nLetters); // # nocov static char str[101]; int i=0; if (ncol<=100) { @@ -434,13 +434,13 @@ void copyFile(size_t fileSize, const char *msg, bool verbose) // only called in { double tt = wallclock(); mmp_copy = (char *)malloc((size_t)fileSize + 1/* extra \0 */); - if (!mmp_copy) STOP("Unable to allocate %s of contiguous virtual RAM. %s allocation.", filesize_to_str(fileSize), msg); + if (!mmp_copy) STOP(_("Unable to allocate %s of contiguous virtual RAM. %s allocation."), filesize_to_str(fileSize), msg); memcpy(mmp_copy, mmp, fileSize); sof = mmp_copy; eof = (char *)mmp_copy + fileSize; tt = wallclock()-tt; - if (tt>0.5) DTPRINT("Avoidable %.3f seconds. %s time to copy.\n", tt, msg); // not warning as that could feasibly cause CRAN tests to fail, say, if test machine is heavily loaded - if (verbose) DTPRINT(" File copy in RAM took %.3f seconds.\n", tt); + if (tt>0.5) DTPRINT(_("Avoidable %.3f seconds. %s time to copy.\n"), tt, msg); // not warning as that could feasibly cause CRAN tests to fail, say, if test machine is heavily loaded + if (verbose) DTPRINT(_(" File copy in RAM took %.3f seconds.\n"), tt); } @@ -1031,7 +1031,7 @@ static int detect_types( const char **pch, int8_t type[], int ncol, bool *bumped if (eol(&ch)) return 0; // empty line int field=0; while (field>(%d)", strlim(ch,20), quoteRule); + // DTPRINT(_("<<%s>>(%d)"), strlim(ch,20), quoteRule); skip_white(&ch); const char *fieldStart = ch; while (tmpType[field]<=CT_STRING) { @@ -1092,17 +1092,17 @@ int freadMain(freadMainArgs _args) { bool warningsAreErrors = args.warningsAreErrors; if (freadCleanup()) { - DTWARN("Previous fread() session was not cleaned up properly. Cleaned up ok at the beginning of this fread() call.\n"); // # nocov + DTWARN(_("Previous fread() session was not cleaned up properly. Cleaned up ok at the beginning of this fread() call.\n")); // # nocov } - if (verbose) DTPRINT("[01] Check arguments\n"); + if (verbose) DTPRINT(_("[01] Check arguments\n")); int nth = args.nth; { int maxth = omp_get_max_threads(); if (nth > maxth) nth = maxth; if (nth <= 0) nth += maxth; if (nth <= 0) nth = 1; - if (verbose) DTPRINT(" Using %d threads (omp_get_max_threads()=%d, nth=%d)\n", nth, maxth, args.nth); + if (verbose) DTPRINT(_(" Using %d threads (omp_get_max_threads()=%d, nth=%d)\n"), nth, maxth, args.nth); } uint64_t ui64 = NA_FLOAT64_I64; @@ -1110,7 +1110,7 @@ int freadMain(freadMainArgs _args) { int64_t nrowLimit = args.nrowLimit; NAstrings = args.NAstrings; - if (NAstrings==NULL) STOP("Internal error: NAstrings is itself NULL. When empty it should be pointer to NULL."); // # nocov + if (NAstrings==NULL) STOP(_("Internal error: NAstrings is itself NULL. When empty it should be pointer to NULL.")); // # nocov any_number_like_NAstrings = false; blank_is_a_NAstring = false; // if we know there are no nastrings which are numbers (like -999999) then in the number @@ -1128,12 +1128,12 @@ int freadMain(freadMainArgs _args) { const char *ch = *nastr; size_t nchar = strlen(ch); if (isspace(ch[0]) || isspace(ch[nchar-1])) - STOP("freadMain: NAstring <<%s>> has whitespace at the beginning or end", ch); + STOP(_("freadMain: NAstring <<%s>> has whitespace at the beginning or end"), ch); if (strcmp(ch,"T")==0 || strcmp(ch,"F")==0 || strcmp(ch,"TRUE")==0 || strcmp(ch,"FALSE")==0 || strcmp(ch,"True")==0 || strcmp(ch,"False")==0 || strcmp(ch,"1")==0 || strcmp(ch,"0")==0) - STOP("freadMain: NAstring <<%s>> is recognized as type boolean, this is not permitted.", ch); + STOP(_("freadMain: NAstring <<%s>> is recognized as type boolean, this is not permitted."), ch); char *end; errno = 0; strtod(ch, &end); // careful not to let "" get to here (see continue above) as strtod considers "" numeric @@ -1143,21 +1143,21 @@ int freadMain(freadMainArgs _args) { disabled_parsers[CT_BOOL8_N] = !args.logical01; if (verbose) { if (*NAstrings == NULL) { - DTPRINT(" No NAstrings provided.\n"); + DTPRINT(_(" No NAstrings provided.\n")); } else { - DTPRINT(" NAstrings = ["); + DTPRINT(_(" NAstrings = [")); const char * const* s = NAstrings; while (*s++) DTPRINT(*s? "<<%s>>, " : "<<%s>>", s[-1]); - DTPRINT("]\n"); + DTPRINT(_("]\n")); if (any_number_like_NAstrings) - DTPRINT(" One or more of the NAstrings looks like a number.\n"); + DTPRINT(_(" One or more of the NAstrings looks like a number.\n")); else - DTPRINT(" None of the NAstrings look like numbers.\n"); + DTPRINT(_(" None of the NAstrings look like numbers.\n")); } - if (args.skipNrow >= 0) DTPRINT(" skip num lines = %llu\n", (llu)args.skipNrow); - if (args.skipString) DTPRINT(" skip to string = <<%s>>\n", args.skipString); - DTPRINT(" show progress = %d\n", args.showProgress); - DTPRINT(" 0/1 column will be read as %s\n", args.logical01? "boolean" : "integer"); + if (args.skipNrow >= 0) DTPRINT(_(" skip num lines = %llu\n"), (llu)args.skipNrow); + if (args.skipString) DTPRINT(_(" skip to string = <<%s>>\n"), args.skipString); + DTPRINT(_(" show progress = %d\n"), args.showProgress); + DTPRINT(_(" 0/1 column will be read as %s\n"), args.logical01? "boolean" : "integer"); } stripWhite = args.stripWhite; @@ -1165,10 +1165,10 @@ int freadMain(freadMainArgs _args) { fill = args.fill; dec = args.dec; quote = args.quote; - if (args.sep == quote && quote!='\0') STOP("sep == quote ('%c') is not allowed", quote); - if (dec=='\0') STOP("dec='' not allowed. Should be '.' or ','"); - if (args.sep == dec) STOP("sep == dec ('%c') is not allowed", dec); - if (quote == dec) STOP("quote == dec ('%c') is not allowed", dec); + if (args.sep == quote && quote!='\0') STOP(_("sep == quote ('%c') is not allowed"), quote); + if (dec=='\0') STOP(_("dec='' not allowed. Should be '.' or ','")); + if (args.sep == dec) STOP(_("sep == dec ('%c') is not allowed"), dec); + if (quote == dec) STOP(_("quote == dec ('%c') is not allowed"), dec); // since quote=='\0' when user passed quote="", the logic in this file uses '*ch==quote && quote' otherwise // the ending \0 at eof could be treated as a quote (test xxx) @@ -1185,29 +1185,29 @@ int freadMain(freadMainArgs _args) { //********************************************************************************************* double tMap; // moment when memory-map step has finished { - if (verbose) DTPRINT("[02] Opening the file\n"); + if (verbose) DTPRINT(_("[02] Opening the file\n")); mmp = NULL; if (args.input) { - if (verbose) DTPRINT(" `input` argument is provided rather than a file name, interpreting as raw text to read\n"); + if (verbose) DTPRINT(_(" `input` argument is provided rather than a file name, interpreting as raw text to read\n")); sof = args.input; fileSize = strlen(sof); eof = sof+fileSize; - if (*eof!='\0') STOP("Internal error: last byte of character input isn't \\0"); // # nocov + if (*eof!='\0') STOP(_("Internal error: last byte of character input isn't \\0")); // # nocov } else if (args.filename) { - if (verbose) DTPRINT(" Opening file %s\n", args.filename); + if (verbose) DTPRINT(_(" Opening file %s\n"), args.filename); const char* fnam = args.filename; #ifndef WIN32 int fd = open(fnam, O_RDONLY); - if (fd==-1) STOP("file not found: %s",fnam); + if (fd==-1) STOP(_("file not found: %s"),fnam); struct stat stat_buf; if (fstat(fd, &stat_buf) == -1) { close(fd); // # nocov - STOP("Opened file ok but couldn't obtain its size: %s", fnam); // # nocov + STOP(_("Opened file ok but couldn't obtain its size: %s"), fnam); // # nocov } fileSize = (size_t) stat_buf.st_size; - if (fileSize == 0) {close(fd); STOP("File is empty: %s", fnam);} - if (verbose) DTPRINT(" File opened, size = %s.\n", filesize_to_str(fileSize)); + if (fileSize == 0) {close(fd); STOP(_("File is empty: %s"), fnam);} + if (verbose) DTPRINT(_(" File opened, size = %s.\n"), filesize_to_str(fileSize)); // No MAP_POPULATE for faster nrows=10 and to make possible earlier progress bar in row count stage // Mac doesn't appear to support MAP_POPULATE anyway (failed on CRAN when I tried). @@ -1224,33 +1224,33 @@ int freadMain(freadMainArgs _args) { hFile = CreateFile(fnam, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); // FILE_SHARE_WRITE is required otherwise if the file is open in Excel, CreateFile fails. Should be ok now. if (hFile==INVALID_HANDLE_VALUE) { - if (GetLastError()==ERROR_FILE_NOT_FOUND) STOP("File not found: %s",fnam); + if (GetLastError()==ERROR_FILE_NOT_FOUND) STOP(_("File not found: %s"),fnam); if (attempts<4) Sleep(250); // 250ms } attempts++; // Looped retry to avoid ephemeral locks by system utilities as recommended here : http://support.microsoft.com/kb/316609 } - if (hFile==INVALID_HANDLE_VALUE) STOP("Unable to open file after %d attempts (error %d): %s", attempts, GetLastError(), fnam); + if (hFile==INVALID_HANDLE_VALUE) STOP(_("Unable to open file after %d attempts (error %d): %s"), attempts, GetLastError(), fnam); LARGE_INTEGER liFileSize; - if (GetFileSizeEx(hFile,&liFileSize)==0) { CloseHandle(hFile); STOP("GetFileSizeEx failed (returned 0) on file: %s", fnam); } + if (GetFileSizeEx(hFile,&liFileSize)==0) { CloseHandle(hFile); STOP(_("GetFileSizeEx failed (returned 0) on file: %s"), fnam); } fileSize = (size_t)liFileSize.QuadPart; - if (fileSize<=0) { CloseHandle(hFile); STOP("File is empty: %s", fnam); } - if (verbose) DTPRINT(" File opened, size = %s.\n", filesize_to_str(fileSize)); + if (fileSize<=0) { CloseHandle(hFile); STOP(_("File is empty: %s"), fnam); } + if (verbose) DTPRINT(_(" File opened, size = %s.\n"), filesize_to_str(fileSize)); HANDLE hMap=CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0, 0, NULL); - if (hMap==NULL) { CloseHandle(hFile); STOP("This is Windows, CreateFileMapping returned error %d for file %s", GetLastError(), fnam); } + if (hMap==NULL) { CloseHandle(hFile); STOP(_("This is Windows, CreateFileMapping returned error %d for file %s"), GetLastError(), fnam); } mmp = MapViewOfFile(hMap,FILE_MAP_COPY,0,0,fileSize); // fileSize must be <= hilo passed to CreateFileMapping above. CloseHandle(hMap); // we don't need to keep the file open; the MapView keeps an internal reference; CloseHandle(hFile); // see https://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx if (mmp == NULL) { #endif int nbit = 8*sizeof(char *); // #nocov - STOP("Opened %s file ok but could not memory map it. This is a %dbit process. %s.", filesize_to_str(fileSize), nbit, - nbit<=32 ? "Please upgrade to 64bit" : "There is probably not enough contiguous virtual memory available"); // # nocov + STOP(_("Opened %s file ok but could not memory map it. This is a %dbit process. %s."), filesize_to_str(fileSize), nbit, + nbit<=32 ? _("Please upgrade to 64bit") : _("There is probably not enough contiguous virtual memory available")); // # nocov } sof = (const char*) mmp; - if (verbose) DTPRINT(" Memory mapped ok\n"); + if (verbose) DTPRINT(_(" Memory mapped ok\n")); } else { - STOP("Internal error: Neither `input` nor `filename` are given, nothing to read."); // # nocov + STOP(_("Internal error: Neither `input` nor `filename` are given, nothing to read.")); // # nocov } eof = sof + fileSize; tMap = wallclock(); @@ -1267,42 +1267,42 @@ int freadMain(freadMainArgs _args) { // See: issues #1087, #1465 and #1612 //********************************************************************************************* { - if (verbose) DTPRINT("[03] Detect and skip BOM\n"); + if (verbose) DTPRINT(_("[03] Detect and skip BOM\n")); if (fileSize >= 3 && memcmp(sof, "\xEF\xBB\xBF", 3) == 0) { sof += 3; // ienc = CE_UTF8; - if (verbose) DTPRINT(" UTF-8 byte order mark EF BB BF found at the start of the file and skipped.\n"); + if (verbose) DTPRINT(_(" UTF-8 byte order mark EF BB BF found at the start of the file and skipped.\n")); } else if (fileSize >= 4 && memcmp(sof, "\x84\x31\x95\x33", 4) == 0) { sof += 4; // ienc = CE_GB18030; - DTWARN("GB-18030 encoding detected, however fread() is unable to decode it. Some character fields may be garbled.\n"); + DTWARN(_("GB-18030 encoding detected, however fread() is unable to decode it. Some character fields may be garbled.\n")); } else if (fileSize >= 2 && sof[0] + sof[1] == '\xFE' + '\xFF') { // either 0xFE 0xFF or 0xFF 0xFE - STOP("File is encoded in UTF-16, this encoding is not supported by fread(). Please recode the file to UTF-8."); + STOP(_("File is encoded in UTF-16, this encoding is not supported by fread(). Please recode the file to UTF-8.")); } if (eof>sof && (eof[-1]=='\x1A' || eof[-1]=='\0')) { char c = eof[-1]; while (eof>sof && eof[-1]==c) eof--; - if (verbose) DTPRINT(" Last byte(s) of input found to be %s and removed.\n", + if (verbose) DTPRINT(_(" Last byte(s) of input found to be %s and removed.\n"), c ? "0x1A (Ctrl+Z)" : "0x00 (NUL)"); } - if (eof<=sof) STOP("Input is empty or only contains BOM or terminal control characters"); + if (eof<=sof) STOP(_("Input is empty or only contains BOM or terminal control characters")); } //********************************************************************************************* // [4] Terminate mmap with \0 //********************************************************************************************* - if (verbose) DTPRINT("[04] Arrange mmap to be \\0 terminated\n"); + if (verbose) DTPRINT(_("[04] Arrange mmap to be \\0 terminated\n")); // First, set 'eol_one_r' for use by eol() to know if \r-only line ending is allowed, #2371 ch = sof; while (chsof && ch[-1]!='\n') ch--; // move to beginning of line pos = ch; ch = sof; while (ch sof && verbose) DTPRINT(" Skipped to line %llu in the file", (llu)row1line); - if (ch>=eof) STOP("skip=%llu but the input only has %llu line%s", (llu)args.skipNrow, (llu)row1line, row1line>1?"s":""); + if (ch > sof && verbose) DTPRINT(_(" Skipped to line %llu in the file"), (llu)row1line); + if (ch>=eof) STOP(_("skip=%llu but the input only has %llu line%s"), (llu)args.skipNrow, (llu)row1line, row1line>1?"s":""); pos = ch; } @@ -1402,10 +1402,10 @@ int freadMain(freadMainArgs _args) { while (ch=eof) STOP("Input is either empty, fully whitespace, or skip has been set after the last non-whitespace."); + if (ch>=eof) STOP(_("Input is either empty, fully whitespace, or skip has been set after the last non-whitespace.")); if (verbose) { - if (lineStart>ch) DTPRINT(" Moved forward to first non-blank line (%d)\n", row1line); - DTPRINT(" Positioned on line %d starting: <<%s>>\n", row1line, strlim(lineStart, 30)); + if (lineStart>ch) DTPRINT(_(" Moved forward to first non-blank line (%d)\n"), row1line); + DTPRINT(_(" Positioned on line %d starting: <<%s>>\n"), row1line, strlim(lineStart, 30)); } ch = pos = lineStart; } @@ -1423,11 +1423,11 @@ int freadMain(freadMainArgs _args) { const char *prevStart = NULL; // the start of the non-empty line before the first not-ignored row (for warning message later, or taking as column names) int jumpLines = (int)umin(100,nrowLimit); // how many lines from each jump point to use. If nrowLimit is supplied, nJumps is later set to 1 as well. { - if (verbose) DTPRINT("[06] Detect separator, quoting rule, and ncolumns\n"); + if (verbose) DTPRINT(_("[06] Detect separator, quoting rule, and ncolumns\n")); if (args.sep == '\n') { // '\n' because '\0' is taken already to mean 'auto' // unusual - if (verbose) DTPRINT(" sep='\\n' passed in meaning read lines as single character column\n"); + if (verbose) DTPRINT(_(" sep='\\n' passed in meaning read lines as single character column\n")); sep = 127; // ASCII DEL: a character different from \r, \n and \0 that isn't in the data whiteChar = 0; quoteRule = 3; // Ignore quoting @@ -1446,14 +1446,14 @@ int freadMain(freadMainArgs _args) { // seps[] not *seps for writeability (http://stackoverflow.com/a/164258/403310) char topSep=127; // which sep 'wins' top place (see top* below). By default 127 (ascii del) means no sep i.e. single-column input (1 field) if (args.sep == '\0') { - if (verbose) DTPRINT(" Detecting sep automatically ...\n"); + if (verbose) DTPRINT(_(" Detecting sep automatically ...\n")); nseps = (int) strlen(seps); } else { seps[0] = args.sep; seps[1] = '\0'; nseps = 1; //topSep = args.sep; - if (verbose) DTPRINT(" Using supplied sep '%s'\n", args.sep=='\t' ? "\\t" : seps); + if (verbose) DTPRINT(_(" Using supplied sep '%s'\n"), args.sep=='\t' ? "\\t" : seps); } int topNumLines=0; // the most number of lines with the same number of fields, so far int topNumFields=1; // how many fields that was, to resolve ties @@ -1468,7 +1468,7 @@ int freadMain(freadMainArgs _args) { sep = seps[s]; whiteChar = (sep==' ' ? '\t' : (sep=='\t' ? ' ' : 0)); // 0 means both ' ' and '\t' to be skipped ch = pos; - // if (verbose) DTPRINT(" Trying sep='%c' with quoteRule %d ...\n", sep, quoteRule); + // if (verbose) DTPRINT(_(" Trying sep='%c' with quoteRule %d ...\n"), sep, quoteRule); if (fill) { if (quoteRule>1 && quote) continue; // turn off self-healing quote rule when filling @@ -1487,7 +1487,7 @@ int freadMain(freadMainArgs _args) { firstJumpEnd = ch; // to know how many bytes jump 0 is, for nrow estimate later (a less-good estimate when fill=true since line lengths vary more) if (verbose) { DTPRINT((unsigned)sep<32 ? " sep=%#02x" : " sep='%c'", sep); - DTPRINT(" with %d fields using quote rule %d\n", topNumFields, quoteRule); + DTPRINT(_(" with %d fields using quote rule %d\n"), topNumFields, quoteRule); } } } else { @@ -1537,14 +1537,14 @@ int freadMain(freadMainArgs _args) { if (topSkip<0) topSkip=0; // inelegant but will do for now to pass single row input such as test 890 if (verbose) { DTPRINT((unsigned)sep<32 ? " sep=%#02x" : " sep='%c'", sep); - DTPRINT(" with %d lines of %d fields using quote rule %d\n", topNumLines, topNumFields, topQuoteRule); + DTPRINT(_(" with %d lines of %d fields using quote rule %d\n"), topNumLines, topNumFields, topQuoteRule); } } } } } if (!firstJumpEnd) { - if (verbose) DTPRINT(" No sep and quote rule found a block of 2x2 or greater. Single column input.\n"); + if (verbose) DTPRINT(_(" No sep and quote rule found a block of 2x2 or greater. Single column input.\n")); topNumFields = 1; ASSERT(topSep==127, "Single column input has topSep=%d", topSep); sep = topSep; @@ -1560,12 +1560,12 @@ int freadMain(freadMainArgs _args) { topQuoteRule = quoteRule; } } - if (!firstJumpEnd) STOP("Single column input contains invalid quotes. Self healing only effective when ncol>1"); + if (!firstJumpEnd) STOP(_("Single column input contains invalid quotes. Self healing only effective when ncol>1")); } quoteRule = topQuoteRule; if (quoteRule>1 && quote) { - DTWARN("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.", jumpLines); + DTWARN(_("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."), jumpLines); // TODO: include line number and text in warning. Could loop again with the standard quote rule to find the line that fails. } sep = topSep; @@ -1581,29 +1581,28 @@ int freadMain(freadMainArgs _args) { } } - if (ncol<1 || row1line<1) STOP("Internal error: ncol==%d line==%d after detecting sep, ncol and first line", ncol, row1line); // # nocov + if (ncol<1 || row1line<1) STOP(_("Internal error: ncol==%d line==%d after detecting sep, ncol and first line"), ncol, row1line); // # nocov int tt = countfields(&ch); ch = pos; // move back to start of line since countfields() moved to next - if (!fill && tt!=ncol) STOP("Internal error: first line has field count %d but expecting %d", tt, ncol); // # nocov + if (!fill && tt!=ncol) STOP(_("Internal error: first line has field count %d but expecting %d"), tt, ncol); // # nocov if (verbose) { - DTPRINT(" Detected %d columns on line %d. This line is either column " - "names or first data row. Line starts as: <<%s>>\n", + DTPRINT(_(" Detected %d columns on line %d. This line is either column names or first data row. Line starts as: <<%s>>\n"), tt, row1line, strlim(pos, 30)); - DTPRINT(" Quote rule picked = %d\n", quoteRule); - DTPRINT(" fill=%s and the most number of columns found is %d\n", fill?"true":"false", ncol); + DTPRINT(_(" Quote rule picked = %d\n"), quoteRule); + DTPRINT(_(" fill=%s and the most number of columns found is %d\n"), fill?"true":"false", ncol); } if (ncol==1 && lastEOLreplaced && (eof[-1]=='\n' || eof[-1]=='\r')) { // Multiple newlines at the end are significant in the case of 1-column files only (multiple NA at the end) if (fileSize%4096==0) { - const char *msg = "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 is a multiple of 4096, too."; - if (verbose) DTPRINT(" Copying file in RAM. %s\n", msg); + const char *msg = _("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 is a multiple of 4096, too."); + if (verbose) DTPRINT(_(" Copying file in RAM. %s\n"), msg); ASSERT(mmp_copy==NULL, "Internal error: mmp has already been copied due to abrupt non-eol ending, so it does not end with 2 or more eol.", 1/*dummy arg for macro*/); // #nocov copyFile(fileSize, msg, verbose); pos = sof + (pos-(const char *)mmp); firstJumpEnd = sof + (firstJumpEnd-(const char *)mmp); } else { - if (verbose) DTPRINT(" 1-column file ends with 2 or more end-of-line. Restoring last eol using extra byte in cow page.\n"); + if (verbose) DTPRINT(_(" 1-column file ends with 2 or more end-of-line. Restoring last eol using extra byte in cow page.\n")); eof++; } *_const_cast(eof-1) = eol_one_r ? '\r' : '\n'; @@ -1622,12 +1621,12 @@ int freadMain(freadMainArgs _args) { double meanLineLen=0.0; // Average length (in bytes) of a single line in the input file size_t bytesRead=0; // Bytes in the data section (i.e. excluding column names, header and footer, if any) { - if (verbose) DTPRINT("[07] Detect column types, good nrow estimate and whether first row is column names\n"); - if (verbose && args.header!=NA_BOOL8) DTPRINT(" 'header' changed by user from 'auto' to %s\n", args.header?"true":"false"); + if (verbose) DTPRINT(_("[07] Detect column types, good nrow estimate and whether first row is column names\n")); + if (verbose && args.header!=NA_BOOL8) DTPRINT(_(" 'header' changed by user from 'auto' to %s\n"), args.header?"true":"false"); type = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); tmpType = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); // used i) in sampling to not stop on errors when bad jump point and ii) when accepting user overrides - if (!type || !tmpType) STOP("Failed to allocate 2 x %d bytes for type and tmpType: %s", ncol, strerror(errno)); + if (!type || !tmpType) STOP(_("Failed to allocate 2 x %d bytes for type and tmpType: %s"), ncol, strerror(errno)); int8_t type0 = 1; while (disabled_parsers[type0]) type0++; @@ -1648,10 +1647,10 @@ int freadMain(freadMainArgs _args) { // *2 to get a good spacing. We don't want overlaps resulting in double counting. } if (verbose) { - DTPRINT(" Number of sampling jump points = %d because ", nJumps); - if (nrowLimit1 && !fill) || (!eol(&ch) && ch!=eof) ) { - if (verbose) DTPRINT(" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. %s\n", + if (verbose) DTPRINT(_(" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. %s\n"), thisNcol0 ? "Most likely this jump landed awkwardly so type bumps here will be skipped." : ""); bumped = false; if (jump==0) lastRowEnd=eof; // to prevent the end from being tested; e.g. a short file with blank line within first 100 like test 976 @@ -1716,7 +1715,7 @@ int freadMain(freadMainArgs _args) { memcpy(type, tmpType, (size_t)ncol); } if (verbose && (bumped || jump==0 || jump==nJumps-1)) { - DTPRINT(" Type codes (jump %03d) : %s Quote rule %d\n", jump, typesAsString(ncol), quoteRule); + DTPRINT(_(" Type codes (jump %03d) : %s Quote rule %d\n"), jump, typesAsString(ncol), quoteRule); } } @@ -1729,7 +1728,7 @@ int freadMain(freadMainArgs _args) { if (tmpType[j]==CT_STRING && type[j]ncol) { - if (fill) STOP("Internal error: fill=true but there is a previous row which should already have been filled."); // # nocov - DTWARN("Detected %d column names but the data has %d columns. Filling rows automatically. Set fill=TRUE explicitly to avoid this warning.\n", tt, ncol); + if (fill) STOP(_("Internal error: fill=true but there is a previous row which should already have been filled.")); // # nocov + DTWARN(_("Detected %d column names but the data has %d columns. Filling rows automatically. Set fill=TRUE explicitly to avoid this warning.\n"), tt, ncol); fill = true; type = (int8_t *)realloc(type, (size_t)tt * sizeof(int8_t)); tmpType = (int8_t *)realloc(tmpType, (size_t)tt * sizeof(int8_t)); - if (!type || !tmpType) STOP("Failed to realloc 2 x %d bytes for type and tmpType: %s", tt, strerror(errno)); + if (!type || !tmpType) STOP(_("Failed to realloc 2 x %d bytes for type and tmpType: %s"), tt, strerror(errno)); for (int j=ncol; j allocnrow) STOP("Internal error: sampleLines(%llu) > allocnrow(%llu)", (llu)sampleLines, (llu)allocnrow); // # nocov + if (sampleLines > allocnrow) STOP(_("Internal error: sampleLines(%llu) > allocnrow(%llu)"), (llu)sampleLines, (llu)allocnrow); // # nocov } } if (nrowLimit < allocnrow) { - if (verbose) DTPRINT(" Alloc limited to lower nrows=%llu passed in.\n", (llu)nrowLimit); + if (verbose) DTPRINT(_(" Alloc limited to lower nrows=%llu passed in.\n"), (llu)nrowLimit); estnrow = allocnrow = nrowLimit; } } @@ -1841,7 +1840,7 @@ int freadMain(freadMainArgs _args) { double tLayout; // Timer for assigning column names const char *colNamesAnchor = pos; { - if (verbose) DTPRINT("[08] Assign column names\n"); + if (verbose) DTPRINT(_("[08] Assign column names\n")); ch = pos; // back to start of first row (column names if header==true) @@ -1849,7 +1848,7 @@ int freadMain(freadMainArgs _args) { colNames = NULL; // userOverride will assign V1, V2, etc } else { colNames = (lenOff*) calloc((size_t)ncol, sizeof(lenOff)); - if (!colNames) STOP("Unable to allocate %d*%d bytes for column name pointers: %s", ncol, sizeof(lenOff), strerror(errno)); + if (!colNames) STOP(_("Unable to allocate %d*%d bytes for column name pointers: %s"), ncol, sizeof(lenOff), strerror(errno)); if (sep==' ') while (*ch==' ') ch++; void *targets[9] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, colNames + autoFirstColName}; FieldParseContext fctx = { @@ -1871,7 +1870,7 @@ int freadMain(freadMainArgs _args) { } if (eol(&ch)) pos = ++ch; else if (*ch=='\0') pos = ch; - else STOP("Internal error: reading colnames ending on '%c'", *ch); // # nocov + else STOP(_("Internal error: reading colnames ending on '%c'"), *ch); // # nocov // now on first data row (row after column names) // when fill=TRUE and column names shorter (test 1635.2), leave calloc initialized lenOff.len==0 } @@ -1889,11 +1888,11 @@ int freadMain(freadMainArgs _args) { size_t rowSize4; // Total bytesize of all fields having sizeof==4 size_t rowSize8; // Total bytesize of all fields having sizeof==8 { - if (verbose) DTPRINT("[09] Apply user overrides on column types\n"); + if (verbose) DTPRINT(_("[09] Apply user overrides on column types\n")); ch = pos; memcpy(tmpType, type, (size_t)ncol) ; if (!userOverride(type, colNames, colNamesAnchor, ncol)) { // colNames must not be changed but type[] can be - if (verbose) DTPRINT(" Cancelled by user: userOverride() returned false."); // # nocov + if (verbose) DTPRINT(_(" Cancelled by user: userOverride() returned false.")); // # nocov freadCleanup(); // # nocov return 1; // # nocov } @@ -1903,15 +1902,14 @@ int freadMain(freadMainArgs _args) { rowSize4 = 0; rowSize8 = 0; size = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); // TODO: remove size[] when we implement Pasha's idea to += size inside processor - if (!size) STOP("Failed to allocate %d bytes for size array: %s", ncol, strerror(errno)); + if (!size) STOP(_("Failed to allocate %d bytes for size array: %s"), ncol, strerror(errno)); nStringCols = 0; nNonStringCols = 0; for (int j=0; j> 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.", + DTWARN(_("Attempt to override column %d <<%.*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."), j+1, colNames[j].len, colNamesAnchor+colNames[j].off, typeName[tmpType[j]], typeName[type[j]]); } type[j] = tmpType[j]; @@ -1925,7 +1923,7 @@ int freadMain(freadMainArgs _args) { rowSize8 += (size[j] & 8); if (type[j] == CT_STRING) nStringCols++; else nNonStringCols++; } - if (verbose) DTPRINT(" After %d type and %d drop user overrides : %s\n", nUserBumped, ndrop, typesAsString(ncol)); + if (verbose) DTPRINT(_(" After %d type and %d drop user overrides : %s\n"), nUserBumped, ndrop, typesAsString(ncol)); tColType = wallclock(); } @@ -1933,8 +1931,8 @@ int freadMain(freadMainArgs _args) { // [10] Allocate the result columns //********************************************************************************************* if (verbose) { - DTPRINT("[10] Allocate memory for the datatable\n"); - DTPRINT(" Allocating %d column slots (%d - %d dropped) with %llu rows\n", + DTPRINT(_("[10] Allocate memory for the datatable\n")); + DTPRINT(_(" Allocating %d column slots (%d - %d dropped) with %llu rows\n"), ncol-ndrop, ncol, ndrop, (llu)allocnrow); } size_t DTbytes = allocateDT(type, size, ncol, ndrop, allocnrow); @@ -1988,13 +1986,13 @@ int freadMain(freadMainArgs _args) { // should only engage when max_nrows is supplied, and supplied small too, so doesn't matter too much. if (initialBuffRows < 10) initialBuffRows = 10; - if (initialBuffRows > INT32_MAX) STOP("Buffer size %lld is too large\n", initialBuffRows); + if (initialBuffRows > INT32_MAX) STOP(_("Buffer size %lld is too large\n"), initialBuffRows); nth = imin(nJumps, nth); - if (verbose) DTPRINT("[11] Read the data\n"); + if (verbose) DTPRINT(_("[11] Read the data\n")); read: // we'll return here to reread any columns with out-of-sample type exceptions, or dirty jumps restartTeam = false; - if (verbose) DTPRINT(" jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n", + if (verbose) DTPRINT(_(" jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n"), jump0, nJumps, (llu)chunkBytes, (llu)(eof-pos)); ASSERT(allocnrow <= nrowLimit, "allocnrow(%llu) <= nrowLimit(%llu)", (llu)allocnrow, (llu)nrowLimit); #pragma omp parallel num_threads(nth) @@ -2111,7 +2109,7 @@ int freadMain(freadMainArgs _args) { if (sep!=' ' && !any_number_like_NAstrings) { // TODO: can this 'if' be dropped somehow? Can numeric NAstrings be dealt with afterwards in one go as numeric comparison? // Try most common and fastest branch first: no whitespace, no quoted numeric, ",," means NA while (j < ncol) { - // DTPRINT("Field %d: '%.10s' as type %d (tch=%p)\n", j+1, tch, type[j], tch); + // DTPRINT(_("Field %d: '%.10s' as type %d (tch=%p)\n"), j+1, tch, type[j], tch); fieldStart = tch; int8_t thisType = type[j]; // fetch shared type once. Cannot read half-written byte is one reason type's type is single byte to avoid atomic read here. int8_t thisSize = size[j]; @@ -2214,7 +2212,7 @@ int freadMain(freadMainArgs _args) { if (verbose) { char temp[1001]; int len = snprintf(temp, 1000, - "Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n", + _("Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n"), j+1, colNames[j].len, colNamesAnchor + colNames[j].off, typeName[abs(joldType)], typeName[abs(thisType)], (int)(tch-fieldStart), fieldStart, (llu)(ctx.DTi+myNrow)); @@ -2336,14 +2334,14 @@ int freadMain(freadMainArgs _args) { if (extraAllocRows) { allocnrow += extraAllocRows; if (allocnrow > nrowLimit) allocnrow = nrowLimit; - if (verbose) DTPRINT(" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) and continue reading from jump %d\n", + if (verbose) DTPRINT(_(" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) and continue reading from jump %d\n"), (llu)extraAllocRows, (llu)allocnrow, jump0); allocateDT(type, size, ncol, ncol - nStringCols - nNonStringCols, allocnrow); extraAllocRows = 0; goto read; } if (restartTeam) { - if (verbose) DTPRINT(" Restarting team from jump %d. nSwept==%d quoteRule==%d\n", jump0, nSwept, quoteRule); + if (verbose) DTPRINT(_(" Restarting team from jump %d. nSwept==%d quoteRule==%d\n"), jump0, nSwept, quoteRule); ASSERT(nSwept>0 || quoteRuleBumpedCh!=NULL, "Internal error: team restart but nSwept==%d and quoteRuleBumpedCh==%p", nSwept, quoteRuleBumpedCh); // # nocov goto read; } @@ -2363,7 +2361,7 @@ int freadMain(freadMainArgs _args) { for (int i=0; i>", strlim(skippedFooter,500)); + DTWARN(_("Discarded single-line footer: <<%s>>"), strlim(skippedFooter,500)); } else { ch = headPos; int tt = countfields(&ch); - DTWARN("Stopped early on line %llu. Expected %d fields but found %d. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>", + DTWARN(_("Stopped early on line %llu. Expected %d fields but found %d. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>"), (llu)DTi+row1line, ncol, tt, strlim(skippedFooter,500)); } } } if (quoteRuleBumpedCh!=NULL && quoteRuleBumpedCh>. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\"\" to avoid this warning.", (llu)quoteRuleBumpedLine, strlim(quoteRuleBumpedCh, 500)); + DTWARN(_("Found and resolved improper quoting out-of-sample. First healed line %llu: <<%s>>. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\"\" to avoid this warning."), (llu)quoteRuleBumpedLine, strlim(quoteRuleBumpedCh, 500)); } if (verbose) { - DTPRINT("=============================\n"); + DTPRINT(_("=============================\n")); if (tTot<0.000001) tTot=0.000001; // to avoid nan% output in some trivially small tests where tot==0.000s - DTPRINT("%8.3fs (%3.0f%%) Memory map %.3fGB file\n", tMap-t0, 100.0*(tMap-t0)/tTot, 1.0*fileSize/(1024*1024*1024)); - DTPRINT("%8.3fs (%3.0f%%) sep=", tLayout-tMap, 100.0*(tLayout-tMap)/tTot); + DTPRINT(_("%8.3fs (%3.0f%%) Memory map %.3fGB file\n"), tMap-t0, 100.0*(tMap-t0)/tTot, 1.0*fileSize/(1024*1024*1024)); + DTPRINT(_("%8.3fs (%3.0f%%) sep="), tLayout-tMap, 100.0*(tLayout-tMap)/tTot); DTPRINT(sep=='\t' ? "'\\t'" : (sep=='\n' ? "'\\n'" : "'%c'"), sep); - DTPRINT(" ncol=%d and header detection\n", ncol); - DTPRINT("%8.3fs (%3.0f%%) Column type detection using %llu sample rows\n", + DTPRINT(_(" ncol=%d and header detection\n"), ncol); + DTPRINT(_("%8.3fs (%3.0f%%) Column type detection using %llu sample rows\n"), tColType-tLayout, 100.0*(tColType-tLayout)/tTot, (llu)sampleLines); - DTPRINT("%8.3fs (%3.0f%%) Allocation of %llu rows x %d cols (%.3fGB) of which %llu (%3.0f%%) rows used\n", + DTPRINT(_("%8.3fs (%3.0f%%) Allocation of %llu rows x %d cols (%.3fGB) of which %llu (%3.0f%%) rows used\n"), tAlloc-tColType, 100.0*(tAlloc-tColType)/tTot, (llu)allocnrow, ncol, DTbytes/(1024.0*1024*1024), (llu)DTi, 100.0*DTi/allocnrow); thRead/=nth; thPush/=nth; double thWaiting = tReread-tAlloc-thRead-thPush; - DTPRINT("%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) using %d threads\n", + DTPRINT(_("%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) using %d threads\n"), tReread-tAlloc, 100.0*(tReread-tAlloc)/tTot, nJumps, nSwept, (double)chunkBytes/(1024*1024), (int)(DTi/nJumps), nth); - DTPRINT(" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n", thRead, 100.0*thRead/tTot, buffGrown); - DTPRINT(" + %8.3fs (%3.0f%%) Transpose\n", thPush, 100.0*thPush/tTot); - DTPRINT(" + %8.3fs (%3.0f%%) Waiting\n", thWaiting, 100.0*thWaiting/tTot); - DTPRINT("%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n", + DTPRINT(_(" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n"), thRead, 100.0*thRead/tTot, buffGrown); + DTPRINT(_(" + %8.3fs (%3.0f%%) Transpose\n"), thPush, 100.0*thPush/tTot); + DTPRINT(_(" + %8.3fs (%3.0f%%) Waiting\n"), thWaiting, 100.0*thWaiting/tTot); + DTPRINT(_("%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n"), tReread-tRead, 100.0*(tReread-tRead)/tTot, nTypeBumpCols); - DTPRINT("%8.3fs Total\n", tTot); + DTPRINT(_("%8.3fs Total\n"), tTot); if (typeBumpMsg) { // if type bumps happened, it's useful to see them at the end after the timing 2 lines up showing the reread time // TODO - construct and output the copy and pastable colClasses argument so user can avoid the reread time if they are diff --git a/src/freadR.c b/src/freadR.c index 817805cfac..0e5d042161 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -81,7 +81,7 @@ SEXP freadR( dtnrows = 0; const char *ch, *ch2; if (!isString(inputArg) || LENGTH(inputArg)!=1) - error("Internal error: freadR input not a single character string: a filename or the data itself. Should have been caught at R level."); // # nocov + error(_("Internal error: freadR input not a single character string: a filename or the data itself. Should have been caught at R level.")); // # nocov ch = ch2 = (const char *)CHAR(STRING_ELT(inputArg,0)); while (*ch2!='\n' && *ch2!='\r' && *ch2!='\0') ch2++; args.input = (*ch2=='\0') ? R_ExpandFileName(ch) : ch; // for convenience so user doesn't have to call path.expand() @@ -89,27 +89,27 @@ SEXP freadR( ch = args.input; while (*ch!='\0' && *ch!='\n' && *ch!='\r') ch++; if (*ch!='\0' || args.input[0]=='\0') { - if (verbose) DTPRINT("Input contains a \\n or is \"\". Taking this to be text input (not a filename)\n"); + if (verbose) DTPRINT(_("Input contains a \\n or is \")\". Taking this to be text input (not a filename)\n")); args.filename = NULL; } else { - if (verbose) DTPRINT("Input contains no \\n. Taking this to be a filename to open\n"); + if (verbose) DTPRINT(_("Input contains no \\n. Taking this to be a filename to open\n")); args.filename = args.input; args.input = NULL; } if (!isString(sepArg) || LENGTH(sepArg)!=1 || strlen(CHAR(STRING_ELT(sepArg,0)))>1) - error("Internal error: freadR sep not a single character. R level catches this."); // # nocov + error(_("Internal error: freadR sep not a single character. R level catches this.")); // # nocov args.sep = CHAR(STRING_ELT(sepArg,0))[0]; // '\0' when default "auto" was replaced by "" at R level if (!(isString(decArg) && LENGTH(decArg)==1 && strlen(CHAR(STRING_ELT(decArg,0)))==1)) - error("Internal error: freadR dec not a single character. R level catches this."); // # nocov + error(_("Internal error: freadR dec not a single character. R level catches this.")); // # nocov args.dec = CHAR(STRING_ELT(decArg,0))[0]; if (IS_FALSE(quoteArg)) { args.quote = '\0'; } else { if (!isString(quoteArg) || LENGTH(quoteArg)!=1 || strlen(CHAR(STRING_ELT(quoteArg,0))) > 1) - error("quote= must be a single character, blank \"\", or FALSE"); + error(_("quote= must be a single character, blank \"\", or FALSE")); args.quote = CHAR(STRING_ELT(quoteArg,0))[0]; } @@ -134,10 +134,10 @@ SEXP freadR( args.skipString = CHAR(STRING_ELT(skipArg,0)); // LENGTH==1 was checked at R level } else if (isInteger(skipArg)) { args.skipNrow = (int64_t)INTEGER(skipArg)[0]; - } else error("Internal error: skip not integer or string in freadR.c"); // # nocov + } else error(_("Internal error: skip not integer or string in freadR.c")); // # nocov if (!isNull(NAstringsArg) && !isString(NAstringsArg)) - error("Internal error: NAstringsArg is type '%s'. R level catches this", type2char(TYPEOF(NAstringsArg))); // # nocov + error(_("Internal error: NAstringsArg is type '%s'. R level catches this"), type2char(TYPEOF(NAstringsArg))); // # nocov int nnas = length(NAstringsArg); const char **NAstrings = (const char **)R_alloc((nnas + 1), sizeof(char*)); // +1 for the final NULL to save a separate nna variable for (int i=0; incol) STOP("Column number %d (select[%d]) is too large for this table, which only has %d columns.",k,i+1,ncol); - if (type[k-1]<0) STOP("Column number %d ('%s') has been selected twice by select=", k, CHAR(STRING_ELT(colNamesSxp,k-1))); + if (k<0) STOP(_("Column number %d (select[%d]) is negative but should be in the range [1,ncol=%d]. Consider drop= for column exclusion."),k,i+1,ncol); + if (k==0) STOP(_("select = 0 (select[%d]) has no meaning. All values of select should be in the range [1,ncol=%d]."),i+1,ncol); + if (k>ncol) STOP(_("Column number %d (select[%d]) is too large for this table, which only has %d columns."),k,i+1,ncol); + if (type[k-1]<0) STOP(_("Column number %d ('%s') has been selected twice by select="), k, CHAR(STRING_ELT(colNamesSxp,k-1))); type[k-1] *= -1; // detect and error on duplicates on all types without calling duplicated() at all selectRankD[k-1] = rank++; // rank not i to skip missing column names } @@ -310,13 +310,13 @@ bool userOverride(int8_t *type, lenOff *colNames, const char *anchor, int ncol) SEXP typeEnum_idx = PROTECT(chmatch(colClassesSxp, typeRName_sxp, NUT)); if (LENGTH(colClassesSxp)==1) { signed char newType = typeEnum[INTEGER(typeEnum_idx)[0]-1]; - if (newType == CT_DROP) STOP("colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing"); + if (newType == CT_DROP) STOP(_("colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing")); for (int i=0; i=1 && k<=ncol) { if (type[k-1]<0) - DTWARN("Column %d ('%s') appears more than once in colClasses. The second time is colClasses[[%d]][%d].", k, CHAR(STRING_ELT(colNamesSxp,k-1)), i+1, j+1); + DTWARN(_("Column %d ('%s') appears more than once in colClasses. The second time is colClasses[[%d]][%d]."), k, CHAR(STRING_ELT(colNamesSxp,k-1)), i+1, j+1); else if (type[k-1]!=CT_DROP) { type[k-1] = -thisType; // freadMain checks bump up only not down. Deliberately don't catch here to test freadMain; e.g. test 959 if (w==NUT) SET_STRING_ELT(colClassesAs, k-1, STRING_ELT(listNames,i)); if (selectRankD) selectRankD[k-1] = rank++; } } else { - DTWARN("Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]", k, i+1, j+1, ncol); + DTWARN(_("Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]"), k, i+1, j+1, ncol); } } } @@ -580,7 +580,7 @@ void pushBuffer(ThreadLocalFreadParsingContext *ctx) } } else if (thisSize == 1) { - if (type[j] > CT_BOOL8_L) STOP("Field size is 1 but the field is of type %d\n", type[j]); + if (type[j] > CT_BOOL8_L) STOP(_("Field size is 1 but the field is of type %d\n"), type[j]); Rboolean *dest = (Rboolean *)((char *)DATAPTR(VECTOR_ELT(DT, resj)) + DTi*sizeof(Rboolean)); char *src1 = (char*)buff1 + off1; for (int i=0; i +#include "po.h" #define FREAD_MAIN_ARGS_EXTRA_FIELDS diff --git a/src/froll.c b/src/froll.c index eb57188d73..c5baf1bd2a 100644 --- a/src/froll.c +++ b/src/froll.c @@ -15,7 +15,7 @@ void frollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int align, double fill, bool narm, int hasna, bool verbose) { if (nx < k) { // if window width bigger than input just return vector of fill values if (verbose) - snprintf(end(ans->message[0]), 500, "%s: window width longer than input vector, returning all NA vector\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: window width longer than input vector, returning all NA vector\n"), __func__); // implicit n_message limit discussed here: https://github.com/Rdatatable/data.table/issues/3423#issuecomment-487722586 for (int i=0; idbl_v[i] = fill; @@ -33,14 +33,14 @@ void frollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int if (ans->status < 3 && align < 1) { // align center or left, only when no errors occurred int k_ = align==-1 ? k-1 : floor(k/2); // offset to shift if (verbose) - snprintf(end(ans->message[0]), 500, "%s: align %d, shift answer by %d\n", __func__, align, -k_); + snprintf(end(ans->message[0]), 500, _("%s: align %d, shift answer by %d\n"), __func__, align, -k_); memmove((char *)ans->dbl_v, (char *)ans->dbl_v + (k_*sizeof(double)), (nx-k_)*sizeof(double)); // apply shift to achieve expected align for (uint64_t i=nx-k_; idbl_v[i] = fill; } } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); } /* fast rolling mean - fast * when no info on NA (hasNA argument) then assume no NAs run faster version @@ -49,7 +49,7 @@ void frollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int */ void frollmeanFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); long double w = 0.0; // sliding window aggregate bool truehasna = hasna>0; // flag to re-run with NA support if NAs detected if (!truehasna) { @@ -69,20 +69,20 @@ void frollmeanFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool if (!R_FINITE((double) w)) { // mark to re-run with NA care if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } } else { // early stopping branch when NAs detected in first k obs if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -138,7 +138,7 @@ void frollmeanFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool */ void frollmeanExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); for (int i=0; idbl_v[i] = fill; } @@ -170,13 +170,13 @@ void frollmeanExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool if (truehasna) { if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%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", __func__); + snprintf(end(ans->message[0]), 500, _("%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"), __func__); } } } @@ -224,7 +224,7 @@ void frollmeanExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool void frollsum(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int align, double fill, bool narm, int hasna, bool verbose) { if (nx < k) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: window width longer than input vector, returning all NA vector\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: window width longer than input vector, returning all NA vector\n"), __func__); for (int i=0; idbl_v[i] = fill; } @@ -241,18 +241,18 @@ void frollsum(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int if (ans->status < 3 && align < 1) { int k_ = align==-1 ? k-1 : floor(k/2); if (verbose) - snprintf(end(ans->message[0]), 500, "%s: align %d, shift answer by %d\n", __func__, align, -k_); + snprintf(end(ans->message[0]), 500, _("%s: align %d, shift answer by %d\n"), __func__, align, -k_); memmove((char *)ans->dbl_v, (char *)ans->dbl_v + (k_*sizeof(double)), (nx-k_)*sizeof(double)); for (uint64_t i=nx-k_; idbl_v[i] = fill; } } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); } void frollsumFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); long double w = 0.0; bool truehasna = hasna>0; if (!truehasna) { @@ -272,20 +272,20 @@ void frollsumFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool n if (!R_FINITE((double) w)) { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } } else { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -336,7 +336,7 @@ void frollsumFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool n } void frollsumExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); for (int i=0; idbl_v[i] = fill; } @@ -363,13 +363,13 @@ void frollsumExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool if (truehasna) { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%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", __func__); + snprintf(end(ans->message[0]), 500, _("%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"), __func__); } } } @@ -408,7 +408,7 @@ void frollsumExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool void frollapply(double *x, int64_t nx, double *w, int k, ans_t *ans, int align, double fill, SEXP call, SEXP rho, bool verbose) { if (nx < k) { if (verbose) - Rprintf("%s: window width longer than input vector, returning all NA vector\n", __func__); + Rprintf(_("%s: window width longer than input vector, returning all NA vector\n"), __func__); for (int i=0; idbl_v[i] = fill; } @@ -425,17 +425,17 @@ void frollapply(double *x, int64_t nx, double *w, int k, ans_t *ans, int align, memcpy(w, x, k*sizeof(double)); SEXP eval0 = PROTECT(eval(call, rho)); if (xlength(eval0) != 1) - error("%s: results from provided FUN are not length 1", __func__); + error(_("%s: results from provided FUN are not length 1"), __func__); SEXPTYPE teval0 = TYPEOF(eval0); if (teval0 == REALSXP) { ans->dbl_v[k-1] = REAL(eval0)[0]; } else { if (teval0==INTSXP || teval0==LGLSXP) { if (verbose) - Rprintf("%s: results from provided FUN are not of type double, coercion from integer or logical will be applied on each iteration\n", __func__); + Rprintf(_("%s: results from provided FUN are not of type double, coercion from integer or logical will be applied on each iteration\n"), __func__); ans->dbl_v[k-1] = REAL(coerceVector(eval0, REALSXP))[0]; } else { - error("%s: results from provided FUN are not of type double", __func__); + error(_("%s: results from provided FUN are not of type double"), __func__); } } UNPROTECT(1); // eval0 @@ -457,12 +457,12 @@ void frollapply(double *x, int64_t nx, double *w, int k, ans_t *ans, int align, if (ans->status < 3 && align < 1) { int k_ = align==-1 ? k-1 : floor(k/2); if (verbose) - Rprintf("%s: align %d, shift answer by %d\n", __func__, align, -k_); + Rprintf(_("%s: align %d, shift answer by %d\n"), __func__, align, -k_); memmove((char *)ans->dbl_v, (char *)ans->dbl_v + (k_*sizeof(double)), (nx-k_)*sizeof(double)); for (int64_t i=nx-k_; idbl_v[i] = fill; } } if (verbose) - Rprintf("%s: took %.3fs\n", __func__, omp_get_wtime()-tic); + Rprintf(_("%s: took %.3fs\n"), __func__, omp_get_wtime()-tic); } diff --git a/src/frollR.c b/src/frollR.c index 66ac763c73..3cc5bbcf31 100644 --- a/src/frollR.c +++ b/src/frollR.c @@ -12,7 +12,7 @@ SEXP coerceToRealListR(SEXP obj) { } else if (isInteger(obj) || isLogical(obj)) { SET_VECTOR_ELT(x, 0, coerceVector(obj, REALSXP)); } else { - error("x must be of type numeric or logical"); + error(_("x must be of type numeric or logical")); } } else { R_len_t nobj = length(obj); @@ -23,7 +23,7 @@ SEXP coerceToRealListR(SEXP obj) { } else if (isInteger(VECTOR_ELT(obj, i)) || isLogical(VECTOR_ELT(obj, i))) { SET_VECTOR_ELT(x, i, coerceVector(VECTOR_ELT(obj, i), REALSXP)); } else { - error("x must be list, data.frame or data.table of numeric or logical types"); + error(_("x must be list, data.frame or data.table of numeric or logical types")); } } } @@ -44,10 +44,10 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX R_len_t nx=length(x); // number of columns to roll on if (xlength(k) == 0) // check that window is non zero length - error("n must be non 0 length"); + error(_("n must be non 0 length")); if (!isLogical(adaptive) || length(adaptive) != 1 || LOGICAL(adaptive)[0] == NA_LOGICAL) - error("adaptive must be TRUE or FALSE"); + error(_("adaptive must be TRUE or FALSE")); bool badaptive = LOGICAL(adaptive)[0]; R_len_t nk = 0; // number of rolling windows, for adaptive might be atomic to be wrapped into list, 0 for clang -Wall @@ -55,21 +55,21 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX SEXP kl = R_NilValue; // holds adaptive window width, if doing adaptive roll fun if (!badaptive) { // validating n input for adaptive=FALSE if (isNewList(k)) - error("n must be integer, list is accepted for adaptive TRUE"); + error(_("n must be integer, list is accepted for adaptive TRUE")); if (isInteger(k)) { // check that k is integer vector ik = k; } else if (isReal(k)) { // if n is double then convert to integer ik = PROTECT(coerceVector(k, INTSXP)); protecti++; } else { - error("n must be integer"); + error(_("n must be integer")); } nk = length(k); R_len_t i=0; // check that all window values positive while (i < nk && INTEGER(ik)[i] > 0) i++; if (i != nk) - error("n must be positive integer values (> 0)"); + error(_("n must be positive integer values (> 0)")); } else { // validating n input for adaptive=TRUE if (isVectorAtomic(k)) { // if not-list then wrap into list kl = PROTECT(allocVector(VECSXP, 1)); protecti++; @@ -78,7 +78,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (isReal(k)) { // if n is double then convert to integer SET_VECTOR_ELT(kl, 0, coerceVector(k, INTSXP)); } else { - error("n must be integer vector or list of integer vectors"); + error(_("n must be integer vector or list of integer vectors")); } nk = 1; } else { @@ -90,7 +90,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (isReal(VECTOR_ELT(k, i))) { // coerce double types to integer SET_VECTOR_ELT(kl, i, coerceVector(VECTOR_ELT(k, i), INTSXP)); } else { - error("n must be integer vector or list of integer vectors"); + error(_("n must be integer vector or list of integer vectors")); } } } @@ -101,12 +101,12 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } if (!IS_TRUE_OR_FALSE(narm)) - error("na.rm must be TRUE or FALSE"); + error(_("na.rm must be TRUE or FALSE")); if (!isLogical(hasna) || length(hasna)!=1) - error("hasNA must be TRUE, FALSE or NA"); + error(_("hasNA must be TRUE, FALSE or NA")); if (LOGICAL(hasna)[0]==FALSE && LOGICAL(narm)[0]) - error("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"); + error(_("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")); int ialign; // decode align to integer if (!strcmp(CHAR(STRING_ELT(align, 0)), "right")) @@ -116,14 +116,14 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX else if (!strcmp(CHAR(STRING_ELT(align, 0)), "left")) ialign = -1; else - error("Internal error: invalid align argument in rolling function, should have been caught before. please report to data.table issue tracker."); // # nocov + error(_("Internal error: invalid align argument in rolling function, should have been caught before. please report to data.table issue tracker.")); // # nocov if (badaptive && ialign!=1) - error("using adaptive TRUE and align argument different than 'right' is not implemented"); + error(_("using adaptive TRUE and align argument different than 'right' is not implemented")); SEXP ans = PROTECT(allocVector(VECSXP, nk * nx)); protecti++; // allocate list to keep results if (verbose) - Rprintf("%s: allocating memory for results %dx%d\n", __func__, nx, nk); + Rprintf(_("%s: allocating memory for results %dx%d\n"), __func__, nx, nk); ans_t *dans = (ans_t *)R_alloc(nx*nk, sizeof(ans_t)); // answer columns as array of ans_t struct double* dx[nx]; // pointers to source columns uint64_t inx[nx]; // to not recalculate `length(x[[i]])` we store it in extra array @@ -132,9 +132,9 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX for (R_len_t j=0; j 0 && (inx[i]!=inx[i-1])) // variable length list input not allowed for adaptive roll - error("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"); + error(_("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")); if (xlength(VECTOR_ELT(kl, j))!=inx[0]) // check that length of integer vectors in n list match to xrows[0] ([0] and not [i] because there is above check for equal xrows) - error("length of integer vector(s) provided as list to 'n' argument must be equal to number of observations provided in 'x'"); + error(_("length of integer vector(s) provided as list to 'n' argument must be equal to number of observations provided in 'x'")); } SET_VECTOR_ELT(ans, i*nk+j, allocVector(REALSXP, inx[i]));// allocate answer vector for this column-window dans[i*nk+j] = ((ans_t) { .dbl_v=REAL(VECTOR_ELT(ans, i*nk+j)), .status=0, .message={"\0","\0","\0","\0"} }); @@ -148,11 +148,11 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (!strcmp(CHAR(STRING_ELT(fun, 0)), "sum")) { sfun = SUM; } else { - error("Internal error: invalid fun argument in rolling function, should have been caught before. please report to data.table issue tracker."); // # nocov + error(_("Internal error: invalid fun argument in rolling function, should have been caught before. please report to data.table issue tracker.")); // # nocov } if (length(fill) != 1) - error("fill must be a vector of length 1"); + error(_("fill must be a vector of length 1")); double dfill; if (isInteger(fill)) { @@ -166,7 +166,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (isLogical(fill) && LOGICAL(fill)[0]==NA_LOGICAL){ dfill = NA_REAL; } else { - error("fill must be numeric"); + error(_("fill must be numeric")); } bool bnarm = LOGICAL(narm)[0]; @@ -182,12 +182,12 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX else if (!strcmp(CHAR(STRING_ELT(algo, 0)), "exact")) ialgo = 1; // exact = 1 else - error("Internal error: invalid algo argument in rolling function, should have been caught before. please report to data.table issue tracker."); // # nocov + error(_("Internal error: invalid algo argument in rolling function, should have been caught before. please report to data.table issue tracker.")); // # nocov int* iik = NULL; if (!badaptive) { if (!isInteger(ik)) - error("Internal error: badaptive=%d but ik is not integer", badaptive); // # nocov + error(_("Internal error: badaptive=%d but ik is not integer"), badaptive); // # nocov iik = INTEGER(ik); // pointer to non-adaptive window width, still can be vector when doing multiple windows } else { // ik is still R_NilValue from initialization. But that's ok as it's only needed below when !badaptive. @@ -195,9 +195,9 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX if (verbose) { if (ialgo==0) - Rprintf("%s: %d column(s) and %d window(s), if product > 1 then entering parallel execution\n", __func__, nx, nk); + Rprintf(_("%s: %d column(s) and %d window(s), if product > 1 then entering parallel execution\n"), __func__, nx, nk); else if (ialgo==1) - Rprintf("%s: %d column(s) and %d window(s), not entering parallel execution here because algo='exact' will compute results in parallel\n", __func__, nx, nk); + Rprintf(_("%s: %d column(s) and %d window(s), not entering parallel execution here because algo='exact' will compute results in parallel\n"), __func__, nx, nk); } #pragma omp parallel for if (ialgo==0 && nx*nk>1) schedule(auto) collapse(2) num_threads(getDTthreads()) for (R_len_t i=0; imessage[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); // implicit n_message limit discussed here: https://github.com/Rdatatable/data.table/issues/3423#issuecomment-487722586 } /* fast adaptive rolling mean - fast @@ -30,13 +30,13 @@ void fadaptiverollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, in */ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; // flag to re-run if NAs detected long double w = 0.0; double *cs = malloc(nx*sizeof(double)); // cumsum vector, same as double cs[nx] but no segfault if (!cs) { // # nocov start ans->status = 3; // raise error - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cumsum", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cumsum"), __func__); free(cs); return; } // # nocov end @@ -59,10 +59,10 @@ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fi } else { // update truehasna flag if NAs detected if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -72,7 +72,7 @@ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fi uint64_t *cn = malloc(nx*sizeof(uint64_t)); // cumulative NA counter, used the same way as cumsum, same as uint64_t cn[nx] but no segfault if (!cn) { // # nocov start ans->status = 3; // raise error - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cum NA counter", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cum NA counter"), __func__); free(cs); free(cn); return; @@ -115,7 +115,7 @@ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fi */ void fadaptiverollmeanExact(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; // flag to re-run if NAs detected if (!truehasna || !narm) { // narm=FALSE handled here as NAs properly propagated in exact algo #pragma omp parallel for num_threads(getDTthreads()) @@ -148,13 +148,13 @@ void fadaptiverollmeanExact(double *x, uint64_t nx, ans_t *ans, int *k, double f if (truehasna) { if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%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", __func__); + snprintf(end(ans->message[0]), 500, _("%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"), __func__); } } } @@ -215,17 +215,17 @@ void fadaptiverollsum(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int fadaptiverollsumExact(x, nx, ans, k, fill, narm, hasna, verbose); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); } void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; long double w = 0.0; double *cs = malloc(nx*sizeof(double)); if (!cs) { // # nocov start ans->status = 3; - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cumsum", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cumsum"), __func__); free(cs); return; } // # nocov end @@ -248,10 +248,10 @@ void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fil } else { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -261,7 +261,7 @@ void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fil uint64_t *cn = malloc(nx*sizeof(uint64_t)); if (!cn) { // # nocov start ans->status = 3; - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cum NA counter", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cum NA counter"), __func__); free(cs); free(cn); return; @@ -299,7 +299,7 @@ void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fil } void fadaptiverollsumExact(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; if (!truehasna || !narm) { #pragma omp parallel for num_threads(getDTthreads()) @@ -327,13 +327,13 @@ void fadaptiverollsumExact(double *x, uint64_t nx, ans_t *ans, int *k, double fi if (truehasna) { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%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", __func__); + snprintf(end(ans->message[0]), 500, _("%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"), __func__); } } } diff --git a/src/fsort.c b/src/fsort.c index 2de548f9bd..f067dee3db 100644 --- a/src/fsort.c +++ b/src/fsort.c @@ -106,9 +106,9 @@ SEXP fsort(SEXP x, SEXP verboseArg) { double t[10]; t[0] = wallclock(); if (!isLogical(verboseArg) || LENGTH(verboseArg)!=1 || LOGICAL(verboseArg)[0]==NA_LOGICAL) - error("verbose must be TRUE or FALSE"); + error(_("verbose must be TRUE or FALSE")); Rboolean verbose = LOGICAL(verboseArg)[0]; - if (!isNumeric(x)) error("x must be a vector of type 'double' currently"); + if (!isNumeric(x)) error(_("x must be a vector of type 'double' currently")); // TODO: not only detect if already sorted, but if it is, just return x to save the duplicate SEXP ansVec = PROTECT(allocVector(REALSXP, xlength(x))); @@ -119,7 +119,7 @@ SEXP fsort(SEXP x, SEXP verboseArg) { int nth = getDTthreads(); int nBatch=nth*2; // at least nth; more to reduce last-man-home; but not too large to keep counts small in cache - if (verbose) Rprintf("nth=%d, nBatch=%d\n",nth,nBatch); + if (verbose) Rprintf(_("nth=%d, nBatch=%d\n"),nth,nBatch); size_t batchSize = (xlength(x)-1)/nBatch + 1; if (batchSize < 1024) batchSize = 1024; // simple attempt to work reasonably for short vector. 1024*8 = 2 4kb pages @@ -153,8 +153,8 @@ SEXP fsort(SEXP x, SEXP verboseArg) { if (mins[i]max) max=maxs[i]; } - if (verbose) Rprintf("Range = [%g,%g]\n", min, max); - if (min < 0.0) error("Cannot yet handle negatives."); + if (verbose) Rprintf(_("Range = [%g,%g]\n"), min, max); + if (min < 0.0) error(_("Cannot yet handle negatives.")); // TODO: -0ULL should allow negatives // avoid twiddle function call as expensive in recent tests (0.34 vs 2.7) // possibly twiddle once to *ans, then untwiddle at the end in a fast parallel sweep @@ -167,14 +167,14 @@ SEXP fsort(SEXP x, SEXP verboseArg) { int MSBNbits = maxBit > 15 ? 16 : maxBit+1; // how many bits make up the MSB int shift = maxBit + 1 - MSBNbits; // the right shift to leave the MSB bits remaining size_t MSBsize = 1LL< 65,536) - if (verbose) Rprintf("maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n", maxBit, MSBNbits, shift, MSBsize); + if (verbose) Rprintf(_("maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n"), maxBit, MSBNbits, shift, MSBsize); R_xlen_t *counts = calloc(nBatch*MSBsize, sizeof(R_xlen_t)); - if (counts==NULL) error("Unable to allocate working memory"); + if (counts==NULL) error(_("Unable to allocate working memory")); // provided MSBsize>=9, each batch is a multiple of at least one 4k page, so no page overlap // TODO: change all calloc, malloc and free to Calloc and Free to be robust to error() and catch ooms. - if (verbose) Rprintf("counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n", + if (verbose) Rprintf(_("counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n"), nBatch*MSBsize*sizeof(R_xlen_t)/(1024*1024), nBatch*MSBsize*sizeof(R_xlen_t)/(4*1024*nBatch), nBatch, batchSize, lastBatchSize); t[3] = wallclock(); @@ -227,7 +227,7 @@ SEXP fsort(SEXP x, SEXP verboseArg) { // sort bins by size, largest first to minimise last-man-home R_xlen_t *msbCounts = counts + (nBatch-1)*MSBsize; // msbCounts currently contains the ending position of each MSB (the starting location of the next) even across empty - if (msbCounts[MSBsize-1] != xlength(x)) error("Internal error: counts[nBatch-1][MSBsize-1] != length(x)"); // # nocov + if (msbCounts[MSBsize-1] != xlength(x)) error(_("Internal error: counts[nBatch-1][MSBsize-1] != length(x)")); // # nocov R_xlen_t *msbFrom = malloc(MSBsize*sizeof(R_xlen_t)); int *order = malloc(MSBsize*sizeof(int)); R_xlen_t cumSum = 0; @@ -243,12 +243,12 @@ SEXP fsort(SEXP x, SEXP verboseArg) { // TODO: time this qsort but likely insignificant. if (verbose) { - Rprintf("Top 5 MSB counts: "); for(int i=0; i<5; i++) Rprintf("%lld ", msbCounts[order[i]]); Rprintf("\n"); - Rprintf("Reduced MSBsize from %d to ", MSBsize); + Rprintf(_("Top 5 MSB counts: ")); for(int i=0; i<5; i++) Rprintf(_("%lld "), msbCounts[order[i]]); Rprintf(_("\n")); + Rprintf(_("Reduced MSBsize from %d to "), MSBsize); } while (MSBsize>0 && msbCounts[order[MSBsize-1]] < 2) MSBsize--; if (verbose) { - Rprintf("%d by excluding 0 and 1 counts\n", MSBsize); + Rprintf(_("%d by excluding 0 and 1 counts\n"), MSBsize); } t[6] = wallclock(); @@ -305,7 +305,7 @@ SEXP fsort(SEXP x, SEXP verboseArg) { double tot = t[7]-t[0]; if (verbose) for (int i=1; i<=7; i++) { - Rprintf("%d: %.3f (%4.1f%%)\n", i, t[i]-t[i-1], 100.*(t[i]-t[i-1])/tot); + Rprintf(_("%d: %.3f (%4.1f%%)\n"), i, t[i]-t[i-1], 100.*(t[i]-t[i-1])/tot); } UNPROTECT(nprotect); diff --git a/src/fwrite.c b/src/fwrite.c index d73dfe625e..1f8ba704bb 100644 --- a/src/fwrite.c +++ b/src/fwrite.c @@ -227,7 +227,7 @@ void writeFloat64(double *col, int64_t row, char **pch) uint64_t l = y * SIZE_SF; // low magnitude mult 10^NUM_SF // l now contains NUM_SF+1 digits as integer where repeated /10 below is accurate - // if (verbose) Rprintf("\nTRACE: acc=%.20Le ; y=%.20Le ; l=%llu ; e=%d ", acc, y, l, exp); + // if (verbose) Rprintf(_("\nTRACE: acc=%.20Le ; y=%.20Le ; l=%llu ; e=%d "), acc, y, l, exp); if (l%10 >= 5) l+=10; // use the last digit to round l /= 10; @@ -598,25 +598,25 @@ void fwriteMain(fwriteMainArgs args) qmethodEscape = args.qmethodEscape; squashDateTime = args.squashDateTime; - if (args.buffMB<1 || args.buffMB>1024) STOP("buffMB=%d outside [1,1024]", args.buffMB); + if (args.buffMB<1 || args.buffMB>1024) STOP(_("buffMB=%d outside [1,1024]"), args.buffMB); size_t buffSize = (size_t)1024*1024*args.buffMB; int eolLen=strlen(args.eol), naLen=strlen(args.na); // Aside: codacy wants strnlen but strnlen is not in C99 (neither is strlen_s). To pass `gcc -std=c99 -Wall -pedantic` // we'd need `#define _POSIX_C_SOURCE 200809L` before #include but that seems a step too far // and platform specific. We prefer to be pure C99. - if (eolLen<=0) STOP("eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d", eolLen); + if (eolLen<=0) STOP(_("eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d"), eolLen); if (args.verbose) { - DTPRINT("Column writers: "); + DTPRINT(_("Column writers: ")); if (args.ncol<=50) { - for (int j=0; j0) width+=MIN(args.scipen,350); // clamp width to IEEE754 max to avoid scipen=99999 allocating buffer larger than can ever be written if (width + #include "po.h" #define STOP error #define DTPRINT Rprintf #endif diff --git a/src/fwriteR.c b/src/fwriteR.c index 8040631db6..115f2a761b 100644 --- a/src/fwriteR.c +++ b/src/fwriteR.c @@ -38,7 +38,7 @@ const int getMaxStringLen(const SEXP *col, const int64_t n) { const int getMaxCategLen(SEXP col) { col = getAttrib(col, R_LevelsSymbol); - if (!isString(col)) error("Internal error: col passed to getMaxCategLen is missing levels"); + if (!isString(col)) error(_("Internal error: col passed to getMaxCategLen is missing levels")); return getMaxStringLen( STRING_PTR(col), LENGTH(col) ); } @@ -72,7 +72,7 @@ void writeList(SEXP *col, int64_t row, char **pch) { SEXP v = col[row]; int32_t wf = whichWriter(v); if (TYPEOF(v)==VECSXP || wf==INT32_MIN || isFactor(v)) { - error("Internal error: getMaxListItemLen should have caught this up front."); // # nocov + error(_("Internal error: getMaxListItemLen should have caught this up front.")); // # nocov } char *ch = *pch; write_chars(sep2start, &ch); @@ -95,12 +95,12 @@ const int getMaxListItemLen(const SEXP *col, const int64_t n) { if (this==last) continue; // no point calling LENGTH() again on the same string; LENGTH is unlikely as fast as single pointer compare int32_t wf = whichWriter(this); if (TYPEOF(this)==VECSXP || wf==INT32_MIN || isFactor(this)) { - error("Row %d 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.", i+1, isFactor(this) ? "factor" : type2char(TYPEOF(this))); + error(_("Row %d 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."), + i+1, isFactor(this) ? "factor" : type2char(TYPEOF(this))); } int width = writerMaxLen[wf]; if (width==0) { - if (wf!=WF_String) STOP("Internal error: row %d of list column has no max length method implemented", i+1); // # nocov + if (wf!=WF_String) STOP(_("Internal error: row %d of list column has no max length method implemented"), i+1); // # nocov const int l = LENGTH(this); for (int j=0; jmaxgrpn) maxgrpn = grpsize[i]; // old comment to be checked: 'needed for #2046 and #2111 when maxgrpn attribute is not attached to empty o' } - if (LENGTH(o) && LENGTH(o)!=nrow) error("o has length %d but sum(l)=%d", LENGTH(o), nrow); + if (LENGTH(o) && LENGTH(o)!=nrow) error(_("o has length %d but sum(l)=%d"), LENGTH(o), nrow); { SEXP tt = getAttrib(o, install("maxgrpn")); - if (length(tt)==1 && INTEGER(tt)[0]!=maxgrpn) error("Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn"); // # nocov + if (length(tt)==1 && INTEGER(tt)[0]!=maxgrpn) error(_("Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn")); // # nocov } int nb = nbit(ngrp-1); @@ -86,7 +86,7 @@ SEXP gforce(SEXP env, SEXP jsub, SEXP o, SEXP f, SEXP l, SEXP irowsArg) { // TODO: enable stress-test mode in tests only (#3205) which can be turned off by default in release to decrease overhead on small data // if that is established to be biting (it may be fine). if (nBatch<1 || batchSize<1 || lastBatchSize<1) { - error("Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d batchSize=%d lastBatchSize=%d\n", // # nocov + error(_("Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d batchSize=%d lastBatchSize=%d\n"), // # nocov nrow, ngrp, nb, shift, highSize, nBatch, batchSize, lastBatchSize); // # nocov } // initial population of g: @@ -95,7 +95,7 @@ SEXP gforce(SEXP env, SEXP jsub, SEXP o, SEXP f, SEXP l, SEXP irowsArg) { int *elem = grp + fp[g]-1; for (int j=0; j>shift) + 1; - //Rprintf("When assigning grp[o] = g, highSize=%d nb=%d shift=%d nBatch=%d\n", highSize, nb, shift, nBatch); + //Rprintf(_("When assigning grp[o] = g, highSize=%d nb=%d shift=%d nBatch=%d\n"), highSize, nb, shift, nBatch); int *counts = calloc(nBatch*highSize, sizeof(int)); // TODO: cache-line align and make highSize a multiple of 64 int *TMP = malloc(nrow*2*sizeof(int)); - if (!counts || !TMP ) error("Internal error: Failed to allocate counts or TMP when assigning g in gforce"); + if (!counts || !TMP ) error(_("Internal error: Failed to allocate counts or TMP when assigning g in gforce")); #pragma omp parallel for num_threads(getDTthreads()) // schedule(dynamic,1) for (int b=0; b8) error("Pointers are %d bytes, greater than 8. We have not tested on any architecture greater than 64bit yet.", sizeof(char *)); + if (sizeof(char *)>8) error(_("Pointers are %d bytes, greater than 8. We have not tested on any architecture greater than 64bit yet."), sizeof(char *)); // One place we need the largest sizeof is the working memory malloc in reorder.c } @@ -206,59 +206,59 @@ void attribute_visible R_init_datatable(DllInfo *info) R_useDynamicSymbols(info, FALSE); setSizes(); const char *msg = "... failed. Please forward this message to maintainer('data.table')."; - if ((int)NA_INTEGER != (int)INT_MIN) error("Checking NA_INTEGER [%d] == INT_MIN [%d] %s", NA_INTEGER, INT_MIN, msg); - if ((int)NA_INTEGER != (int)NA_LOGICAL) error("Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s", NA_INTEGER, NA_LOGICAL, msg); - if (sizeof(int) != 4) error("Checking sizeof(int) [%d] is 4 %s", sizeof(int), msg); - if (sizeof(double) != 8) error("Checking sizeof(double) [%d] is 8 %s", sizeof(double), msg); // 8 on both 32bit and 64bit - // alignof not available in C99: if (alignof(double) != 8) error("Checking alignof(double) [%d] is 8 %s", alignof(double), msg); // 8 on both 32bit and 64bit - if (sizeof(long long) != 8) error("Checking sizeof(long long) [%d] is 8 %s", sizeof(long long), msg); - if (sizeof(char *) != 4 && sizeof(char *) != 8) error("Checking sizeof(pointer) [%d] is 4 or 8 %s", sizeof(char *), msg); - if (sizeof(SEXP) != sizeof(char *)) error("Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s", sizeof(SEXP), sizeof(char *), msg); - if (sizeof(uint64_t) != 8) error("Checking sizeof(uint64_t) [%d] is 8 %s", sizeof(uint64_t), msg); - if (sizeof(int64_t) != 8) error("Checking sizeof(int64_t) [%d] is 8 %s", sizeof(int64_t), msg); - if (sizeof(signed char) != 1) error("Checking sizeof(signed char) [%d] is 1 %s", sizeof(signed char), msg); - if (sizeof(int8_t) != 1) error("Checking sizeof(int8_t) [%d] is 1 %s", sizeof(int8_t), msg); - if (sizeof(uint8_t) != 1) error("Checking sizeof(uint8_t) [%d] is 1 %s", sizeof(uint8_t), msg); - if (sizeof(int16_t) != 2) error("Checking sizeof(int16_t) [%d] is 2 %s", sizeof(int16_t), msg); - if (sizeof(uint16_t) != 2) error("Checking sizeof(uint16_t) [%d] is 2 %s", sizeof(uint16_t), msg); + if ((int)NA_INTEGER != (int)INT_MIN) error(_("Checking NA_INTEGER [%d] == INT_MIN [%d] %s"), NA_INTEGER, INT_MIN, msg); + if ((int)NA_INTEGER != (int)NA_LOGICAL) error(_("Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s"), NA_INTEGER, NA_LOGICAL, msg); + if (sizeof(int) != 4) error(_("Checking sizeof(int) [%d] is 4 %s"), sizeof(int), msg); + if (sizeof(double) != 8) error(_("Checking sizeof(double) [%d] is 8 %s"), sizeof(double), msg); // 8 on both 32bit and 64bit + // alignof not available in C99: if (alignof(double) != 8) error(_("Checking alignof(double) [%d] is 8 %s"), alignof(double), msg); // 8 on both 32bit and 64bit + if (sizeof(long long) != 8) error(_("Checking sizeof(long long) [%d] is 8 %s"), sizeof(long long), msg); + if (sizeof(char *) != 4 && sizeof(char *) != 8) error(_("Checking sizeof(pointer) [%d] is 4 or 8 %s"), sizeof(char *), msg); + if (sizeof(SEXP) != sizeof(char *)) error(_("Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s"), sizeof(SEXP), sizeof(char *), msg); + if (sizeof(uint64_t) != 8) error(_("Checking sizeof(uint64_t) [%d] is 8 %s"), sizeof(uint64_t), msg); + if (sizeof(int64_t) != 8) error(_("Checking sizeof(int64_t) [%d] is 8 %s"), sizeof(int64_t), msg); + if (sizeof(signed char) != 1) error(_("Checking sizeof(signed char) [%d] is 1 %s"), sizeof(signed char), msg); + if (sizeof(int8_t) != 1) error(_("Checking sizeof(int8_t) [%d] is 1 %s"), sizeof(int8_t), msg); + if (sizeof(uint8_t) != 1) error(_("Checking sizeof(uint8_t) [%d] is 1 %s"), sizeof(uint8_t), msg); + if (sizeof(int16_t) != 2) error(_("Checking sizeof(int16_t) [%d] is 2 %s"), sizeof(int16_t), msg); + if (sizeof(uint16_t) != 2) error(_("Checking sizeof(uint16_t) [%d] is 2 %s"), sizeof(uint16_t), msg); SEXP tmp = PROTECT(allocVector(INTSXP,2)); - if (LENGTH(tmp)!=2) error("Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s", LENGTH(tmp), msg); - if (TRUELENGTH(tmp)!=0) error("Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s", TRUELENGTH(tmp), msg); + if (LENGTH(tmp)!=2) error(_("Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s"), LENGTH(tmp), msg); + if (TRUELENGTH(tmp)!=0) error(_("Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s"), TRUELENGTH(tmp), msg); UNPROTECT(1); // According to IEEE (http://en.wikipedia.org/wiki/IEEE_754-1985#Zero) we can rely on 0.0 being all 0 bits. // But check here anyway just to be sure, just in case this answer is right (http://stackoverflow.com/a/2952680/403310). int i = 314; memset(&i, 0, sizeof(int)); - if (i != 0) error("Checking memset(&i,0,sizeof(int)); i == (int)0 %s", msg); + if (i != 0) error(_("Checking memset(&i,0,sizeof(int)); i == (int)0 %s"), msg); unsigned int ui = 314; memset(&ui, 0, sizeof(unsigned int)); - if (ui != 0) error("Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s", msg); + if (ui != 0) error(_("Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s"), msg); double d = 3.14; memset(&d, 0, sizeof(double)); - if (d != 0.0) error("Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s", msg); + if (d != 0.0) error(_("Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s"), msg); long double ld = 3.14; memset(&ld, 0, sizeof(long double)); - if (ld != 0.0) error("Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s", msg); + if (ld != 0.0) error(_("Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s"), msg); // Check unsigned cast used in fread.c. This isn't overflow/underflow, just cast. - if ((uint_fast8_t)('0'-'/') != 1) error("The ascii character '/' is not just before '0'"); - if ((uint_fast8_t)('/'-'0') < 10) error("The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false."); - if ((uint_fast8_t)(':'-'9') != 1) error("The ascii character ':' is not just after '9'"); - if ((uint_fast8_t)('9'-':') < 10) error("The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false."); + if ((uint_fast8_t)('0'-'/') != 1) error(_("The ascii character '/' is not just before '0'")); + if ((uint_fast8_t)('/'-'0') < 10) error(_("The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false.")); + if ((uint_fast8_t)(':'-'9') != 1) error(_("The ascii character ':' is not just after '9'")); + if ((uint_fast8_t)('9'-':') < 10) error(_("The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false.")); // Variables rather than #define for NA_INT64 to ensure correct usage; i.e. not casted NA_INT64_LL = LLONG_MIN; NA_INT64_D = LLtoD(NA_INT64_LL); - if (NA_INT64_LL != DtoLL(NA_INT64_D)) error("Conversion of NA_INT64 via double failed %lld!=%lld", NA_INT64_LL, DtoLL(NA_INT64_D)); + if (NA_INT64_LL != DtoLL(NA_INT64_D)) error(_("Conversion of NA_INT64 via double failed %lld!=%lld"), NA_INT64_LL, DtoLL(NA_INT64_D)); // LLONG_MIN when punned to double is the sign bit set and then all zeros in exponent and significand i.e. -0.0 // That's why we must never test for NA_INT64_D using == in double type. Must always DtoLL and compare long long types. // Assigning NA_INT64_D to a REAL is ok however. - if (NA_INT64_D != 0.0) error("NA_INT64_D (negative -0.0) is not == 0.0."); - if (NA_INT64_D != -0.0) error("NA_INT64_D (negative -0.0) is not ==-0.0."); - if (ISNAN(NA_INT64_D)) error("ISNAN(NA_INT64_D) is TRUE but should not be"); - if (isnan(NA_INT64_D)) error("isnan(NA_INT64_D) is TRUE but should not be"); + if (NA_INT64_D != 0.0) error(_("NA_INT64_D (negative -0.0) is not == 0.0.")); + if (NA_INT64_D != -0.0) error(_("NA_INT64_D (negative -0.0) is not ==-0.0.")); + if (ISNAN(NA_INT64_D)) error(_("ISNAN(NA_INT64_D) is TRUE but should not be")); + if (isnan(NA_INT64_D)) error(_("isnan(NA_INT64_D) is TRUE but should not be")); NA_CPLX.r = NA_REAL; // NA_REAL is defined as R_NaReal which is not a strict constant and thus initializer {NA_REAL, NA_REAL} can't be used in .h NA_CPLX.i = NA_REAL; // https://github.com/Rdatatable/data.table/pull/3689/files#r304117234 @@ -287,7 +287,7 @@ void attribute_visible R_init_datatable(DllInfo *info) if (TYPEOF(char_integer64) != CHARSXP) { // checking one is enough in case of any R-devel changes - error("PRINTNAME(install(\"integer64\")) has returned %s not %s", type2char(TYPEOF(char_integer64)), type2char(CHARSXP)); // # nocov + error(_("PRINTNAME(install(\")integer64\")) has returned %s not %s"), type2char(TYPEOF(char_integer64)), type2char(CHARSXP)); // # nocov } // create commonly used symbols, same as R_*Symbol but internal to DT @@ -356,7 +356,7 @@ SEXP hasOpenMP() { extern int *_Last_updated; // assign.c SEXP initLastUpdated(SEXP var) { - if (!isInteger(var) || LENGTH(var)!=1) error(".Last.value in namespace is not a length 1 integer"); + if (!isInteger(var) || LENGTH(var)!=1) error(_(".Last.value in namespace is not a length 1 integer")); _Last_updated = INTEGER(var); return R_NilValue; } diff --git a/src/inrange.c b/src/inrange.c index 7bc6571577..158f0ad2b6 100644 --- a/src/inrange.c +++ b/src/inrange.c @@ -21,14 +21,14 @@ SEXP inrange(SEXP ansArg, SEXP xoArg, SEXP startsArg, SEXP lenArg) { // while (i < n) { // ss = starts[i]-1; // ee = ss + len[i]-1; - // // Rprintf("Starting at %d, start=%d, end=%d\n", i, ss, ee); + // // Rprintf(_("Starting at %d, start=%d, end=%d\n"), i, ss, ee); // // ss[i+1] >= ss[i] due to ordering from R-side // // if ee[i] >= ss[i+1], then there's overlap, pick largest of ee[i], ee[i+1] // while(++i < n && ee >= (new_ss = starts[i]-1)) { // new_ee = new_ss + len[i]-1; // ee = ee > new_ee ? ee : new_ee; // } - // // Rprintf("Moved to %d, start=%d, end=%d\n", i, ss, ee); + // // Rprintf(_("Moved to %d, start=%d, end=%d\n"), i, ss, ee); // for (j=ss; j<=ee; j++) ans[nxo ? xo[j]-1 : j] = 1; // } return (R_NilValue); diff --git a/src/nafill.c b/src/nafill.c index 841d9f6fb1..75b3e1356e 100644 --- a/src/nafill.c +++ b/src/nafill.c @@ -70,7 +70,7 @@ void nafillInteger64(int64_t *x, uint_fast64_t nx, unsigned int type, int64_t fi SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP inplace, SEXP cols, SEXP verbose) { int protecti=0; if (!IS_TRUE_OR_FALSE(verbose)) - error("verbose must be TRUE or FALSE"); + error(_("verbose must be TRUE or FALSE")); bool bverbose = LOGICAL(verbose)[0]; if (!xlength(obj)) @@ -80,9 +80,9 @@ SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP inplace, SEXP cols, SEXP verbo SEXP x = R_NilValue; if (isVectorAtomic(obj)) { if (binplace) - error("'x' argument is atomic vector, in-place update is supported only for list/data.table"); + error(_("'x' argument is atomic vector, in-place update is supported only for list/data.table")); else if (!isReal(obj) && !isInteger(obj)) - error("'x' argument must be numeric type, or list/data.table of numeric types"); + error(_("'x' argument must be numeric type, or list/data.table of numeric types")); x = PROTECT(allocVector(VECSXP, 1)); protecti++; // wrap into list SET_VECTOR_ELT(x, 0, obj); } else { @@ -92,7 +92,7 @@ SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP inplace, SEXP cols, SEXP verbo for (int i=0; iINT_MAX) { - warning("Ignoring invalid %s==\"%s\". Not an integer >= 1. Please remove any characters that are not a digit [0-9]. See ?data.table::setDTthreads.", name, val); + warning(_("Ignoring invalid %s==\")%s\". Not an integer >= 1. Please remove any characters that are not a digit [0-9]. See ?data.table::setDTthreads."), name, val); return def; } return (int)ans; @@ -37,7 +37,7 @@ void initDTthreads() { int perc = getIntEnv("R_DATATABLE_NUM_PROCS_PERCENT", 50); // use "NUM_PROCS" to use the same name as the OpenMP function this uses // 50% of logical CPUs by default; half of 8 is 4 on laptop with 4 cores. Leaves plenty of room for other processes: #3395 & #3298 if (perc<=1 || perc>100) { - warning("Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an integer between 2 and 100. Default is 50. See ?setDTtheads.", perc); + warning(_("Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an integer between 2 and 100. Default is 50. See ?setDTtheads."), perc); // not allowing 1 is to catch attempts to use 1 or 1.0 to represent 100%. perc = 50; } @@ -64,23 +64,23 @@ static const char *mygetenv(const char *name, const char *unset) { } SEXP getDTthreads_R(SEXP verbose) { - if (!isLogical(verbose) || LENGTH(verbose)!=1 || INTEGER(verbose)[0]==NA_LOGICAL) error("'verbose' must be TRUE or FALSE"); + if (!isLogical(verbose) || LENGTH(verbose)!=1 || INTEGER(verbose)[0]==NA_LOGICAL) error(_("'verbose' must be TRUE or FALSE")); if (LOGICAL(verbose)[0]) { #ifndef _OPENMP - Rprintf("This installation of data.table has not been compiled with OpenMP support.\n"); + Rprintf(_("This installation of data.table has not been compiled with OpenMP support.\n")); #endif // this output is captured, paste0(collapse="; ")'d, and placed at the end of test.data.table() for display in the last 13 lines of CRAN check logs // it is also printed at the start of test.data.table() so that we can trace any Killed events on CRAN before the end is reached // this is printed verbatim (e.g. without using data.table to format the output) in case there is a problem even with simple data.table creation/printing - Rprintf(" omp_get_num_procs() %d\n", omp_get_num_procs()); - Rprintf(" R_DATATABLE_NUM_PROCS_PERCENT %s\n", mygetenv("R_DATATABLE_NUM_PROCS_PERCENT", "unset (default 50)")); - Rprintf(" R_DATATABLE_NUM_THREADS %s\n", mygetenv("R_DATATABLE_NUM_THREADS", "unset")); - Rprintf(" omp_get_thread_limit() %d\n", omp_get_thread_limit()); - Rprintf(" omp_get_max_threads() %d\n", omp_get_max_threads()); - Rprintf(" OMP_THREAD_LIMIT %s\n", mygetenv("OMP_THREAD_LIMIT", "unset")); // CRAN sets to 2 - Rprintf(" OMP_NUM_THREADS %s\n", mygetenv("OMP_NUM_THREADS", "unset")); - Rprintf(" RestoreAfterFork %s\n", RestoreAfterFork ? "true" : "false"); - Rprintf(" data.table is using %d threads. See ?setDTthreads.\n", getDTthreads()); + Rprintf(_(" omp_get_num_procs() %d\n"), omp_get_num_procs()); + Rprintf(_(" R_DATATABLE_NUM_PROCS_PERCENT %s\n"), mygetenv("R_DATATABLE_NUM_PROCS_PERCENT", "unset (default 50)")); + Rprintf(_(" R_DATATABLE_NUM_THREADS %s\n"), mygetenv("R_DATATABLE_NUM_THREADS", "unset")); + Rprintf(_(" omp_get_thread_limit() %d\n"), omp_get_thread_limit()); + Rprintf(_(" omp_get_max_threads() %d\n"), omp_get_max_threads()); + Rprintf(_(" OMP_THREAD_LIMIT %s\n"), mygetenv("OMP_THREAD_LIMIT", "unset")); // CRAN sets to 2 + Rprintf(_(" OMP_NUM_THREADS %s\n"), mygetenv("OMP_NUM_THREADS", "unset")); + Rprintf(_(" RestoreAfterFork %s\n"), RestoreAfterFork ? "true" : "false"); + Rprintf(_(" data.table is using %d threads. See ?setDTthreads.\n"), getDTthreads()); } return ScalarInteger(getDTthreads()); } @@ -88,7 +88,7 @@ SEXP getDTthreads_R(SEXP verbose) { SEXP setDTthreads(SEXP threads, SEXP restore_after_fork, SEXP percent) { if (!isNull(restore_after_fork)) { if (!isLogical(restore_after_fork) || LOGICAL(restore_after_fork)[0]==NA_LOGICAL) { - error("restore_after_fork= must be TRUE, FALSE, or NULL (default). getDTthreads(verbose=TRUE) reports the current setting.\n"); + error(_("restore_after_fork= must be TRUE, FALSE, or NULL (default). getDTthreads(verbose=TRUE) reports the current setting.\n")); } RestoreAfterFork = LOGICAL(restore_after_fork)[0]; // # nocov } @@ -102,19 +102,19 @@ SEXP setDTthreads(SEXP threads, SEXP restore_after_fork, SEXP percent) { // reflect that and a call to setDTthreads(threads=NULL) will update DTthreads. } else { int n=0, protecti=0; - if (length(threads)!=1) error("threads= must be either NULL (default) or a single number. It has length %d", length(threads)); + if (length(threads)!=1) error(_("threads= must be either NULL (default) or a single number. It has length %d"), length(threads)); if (isReal(threads)) { threads = PROTECT(coerceVector(threads, INTSXP)); protecti++; } - if (!isInteger(threads)) error("threads= must be either NULL (default) or type integer/numeric"); + if (!isInteger(threads)) error(_("threads= must be either NULL (default) or type integer/numeric")); if ((n=INTEGER(threads)[0]) < 0) { // <0 catches NA too since NA is negative (INT_MIN) - error("threads= must be either NULL or a single integer >= 0. See ?setDTthreads."); + error(_("threads= must be either NULL or a single integer >= 0. See ?setDTthreads.")); } UNPROTECT(protecti); int num_procs = imax(omp_get_num_procs(), 1); // max just in case omp_get_num_procs() returns <= 0 (perhaps error, or unsupported) if (!isLogical(percent) || length(percent)!=1 || LOGICAL(percent)[0]==NA_LOGICAL) { - error("Internal error: percent= must be TRUE or FALSE at C level"); // # nocov + error(_("Internal error: percent= must be TRUE or FALSE at C level")); // # nocov } if (LOGICAL(percent)[0]) { - if (n<2 || n>100) error("Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C level).", n); // # nocov + if (n<2 || n>100) error(_("Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C level)."), n); // # nocov n = num_procs*n/100; // if 0 it will be reset to 1 in the imax() below } else { if (n==0 || n>num_procs) n = num_procs; // setDTthreads(0) == setDTthread(percent=100); i.e. use all logical CPUs (the default in 1.12.0 and before, from 1.12.2 it's 50%) diff --git a/src/po.h b/src/po.h new file mode 100644 index 0000000000..8392f6b375 --- /dev/null +++ b/src/po.h @@ -0,0 +1,6 @@ +#ifdef ENABLE_NLS +#include +#define _(String) dgettext ("data.table", String) +#else +#define _(String) (String) +#endif diff --git a/src/rbindlist.c b/src/rbindlist.c index f9bba8bb78..937fdd303e 100644 --- a/src/rbindlist.c +++ b/src/rbindlist.c @@ -5,19 +5,19 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) { if (!isLogical(fillArg) || LENGTH(fillArg) != 1 || LOGICAL(fillArg)[0] == NA_LOGICAL) - error("fill= should be TRUE or FALSE"); + error(_("fill= should be TRUE or FALSE")); if (!isLogical(usenamesArg) || LENGTH(usenamesArg)!=1) - error("use.names= should be TRUE, FALSE, or not used (\"check\" by default)"); // R levels converts "check" to NA + error(_("use.names= should be TRUE, FALSE, or not used (\"check\" by default)")); // R levels converts "check" to NA if (!length(l)) return(l); - if (TYPEOF(l) != VECSXP) error("Input to rbindlist must be a list. This list can contain data.tables, data.frames or plain lists."); + if (TYPEOF(l) != VECSXP) error(_("Input to rbindlist must be a list. This list can contain data.tables, data.frames or plain lists.")); Rboolean usenames = LOGICAL(usenamesArg)[0]; const bool fill = LOGICAL(fillArg)[0]; if (fill && usenames!=TRUE) { - if (usenames==FALSE) warning("use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE."); // else no warning if usenames==NA (default) + if (usenames==FALSE) warning(_("use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE.")); // else no warning if usenames==NA (default) usenames=TRUE; } const bool idcol = !isNull(idcolArg); - if (idcol && (!isString(idcolArg) || LENGTH(idcolArg)!=1)) error("Internal error: rbindlist.c idcol is not a single string"); // # nocov + if (idcol && (!isString(idcolArg) || LENGTH(idcolArg)!=1)) error(_("Internal error: rbindlist.c idcol is not a single string")); // # nocov int ncol=0, first=0; int64_t nrow=0, upperBoundUniqueNames=1; bool anyNames=false; @@ -28,25 +28,25 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) eachMax[i] = 0; SEXP li = VECTOR_ELT(l, i); if (isNull(li)) continue; - if (TYPEOF(li) != VECSXP) error("Item %d of input is not a data.frame, data.table or list", i+1); + if (TYPEOF(li) != VECSXP) error(_("Item %d of input is not a data.frame, data.table or list"), i+1); const int thisncol = length(li); if (!thisncol) continue; - // delete as now more flexible ... if (fill && isNull(getAttrib(li, R_NamesSymbol))) error("When fill=TRUE every item of the input must have column names. Item %d does not.", i+1); + // delete as now more flexible ... if (fill && isNull(getAttrib(li, R_NamesSymbol))) error(_("When fill=TRUE every item of the input must have column names. Item %d does not."), i+1); if (fill) { if (thisncol>ncol) ncol=thisncol; // this section initializes ncol with max ncol. ncol may be increased when usenames is accounted for further down } else { if (ncol==0) { ncol=thisncol; first=i; } - else if (thisncol!=ncol) error("Item %d has %d columns, inconsistent with item %d which has %d columns. To fill missing columns use fill=TRUE.", i+1, thisncol, first+1, ncol); + else if (thisncol!=ncol) error(_("Item %d has %d columns, inconsistent with item %d which has %d columns. To fill missing columns use fill=TRUE."), i+1, thisncol, first+1, ncol); } int nNames = length(getAttrib(li, R_NamesSymbol)); - if (nNames>0 && nNames!=thisncol) error("Item %d has %d columns but %d column names. Invalid object.", i+1, thisncol, nNames); + if (nNames>0 && nNames!=thisncol) error(_("Item %d has %d columns but %d column names. Invalid object."), i+1, thisncol, nNames); if (nNames>0) anyNames=true; upperBoundUniqueNames += nNames; int maxLen=0, whichMax=0; for (int j=0; jmaxLen) { maxLen=tt; whichMax=j; } } for (int j=0; j1 && tt!=maxLen) error("Column %d of item %d is length %d inconsistent with column %d which is length %d. Only length-1 columns are recycled.", j+1, i+1, tt, whichMax+1, maxLen); + if (tt>1 && tt!=maxLen) error(_("Column %d of item %d is length %d inconsistent with column %d which is length %d. Only length-1 columns are recycled."), j+1, i+1, tt, whichMax+1, maxLen); if (tt==0 && maxLen>0 && numZero++==0) { firstZeroCol = j; firstZeroItem=i; } } eachMax[i] = maxLen; @@ -55,12 +55,12 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (numZero) { // #1871 SEXP names = getAttrib(VECTOR_ELT(l, firstZeroItem), R_NamesSymbol); const char *ch = names==R_NilValue ? "" : CHAR(STRING_ELT(names, firstZeroCol)); - warning("Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has been filled with NA (NULL for list columns) to make each item uniform.", + warning(_("Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has been filled with NA (NULL for list columns) to make each item uniform."), firstZeroCol+1, ch, firstZeroItem+1, numZero-1, numZero==2?"":"s"); } if (nrow==0 && ncol==0) return(R_NilValue); - if (nrow>INT32_MAX) error("Total rows in the list is %lld which is larger than the maximum number of rows, currently %d", nrow, INT32_MAX); - if (usenames==TRUE && !anyNames) error("use.names=TRUE but no item of input list has any names"); + if (nrow>INT32_MAX) error(_("Total rows in the list is %lld which is larger than the maximum number of rows, currently %d"), nrow, INT32_MAX); + if (usenames==TRUE && !anyNames) error(_("use.names=TRUE but no item of input list has any names")); int *colMap=NULL; // maps each column in final result to the column of each list item if (usenames==TRUE || usenames==NA_LOGICAL) { @@ -68,7 +68,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) // when use.names==NA we also proceed here as if use.names was TRUE to save new code and then check afterwards the map is 1:ncol for every item // first find number of unique column names present; i.e. length(unique(unlist(lapply(l,names)))) SEXP *uniq = (SEXP *)malloc(upperBoundUniqueNames * sizeof(SEXP)); // upperBoundUniqueNames was initialized with 1 to ensure this is defined (otherwise 0 when no item has names) - if (!uniq) error("Failed to allocate upper bound of %lld unique column names [sum(lapply(l,ncol))]", upperBoundUniqueNames); + if (!uniq) error(_("Failed to allocate upper bound of %lld unique column names [sum(lapply(l,ncol))]"), upperBoundUniqueNames); savetl_init(); int nuniq=0; for (int i=0; iTYPEORDER(maxType)) maxType=thisType; if (isFactor(thisCol)) { - if (isNull(getAttrib(thisCol,R_LevelsSymbol))) error("Column %d of item %d has type 'factor' but has no levels; i.e. malformed.", w+1, i+1); + if (isNull(getAttrib(thisCol,R_LevelsSymbol))) error(_("Column %d of item %d has type 'factor' but has no levels; i.e. malformed."), w+1, i+1); factor = true; if (isOrdered(thisCol)) { orderedFactor = true; @@ -312,7 +312,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (!R_compute_identical(PROTECT(getAttrib(thisCol, R_ClassSymbol)), PROTECT(getAttrib(firstCol, R_ClassSymbol)), 0)) { - error("Class attribute on column %d of item %d does not match with column %d of item %d.", w+1, i+1, firstw+1, firsti+1); + error(_("Class attribute on column %d of item %d does not match with column %d of item %d."), w+1, i+1, firstw+1, firsti+1); } UNPROTECT(2); } @@ -322,13 +322,13 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (!foundName) { static char buff[12]; sprintf(buff,"V%d",j+1), SET_STRING_ELT(ansNames, idcol+j, mkChar(buff)); foundName=buff; } if (factor) maxType=INTSXP; // if any items are factors then a factor is created (could be an option) if (int64 && maxType!=REALSXP) - error("Internal error: column %d of result is determined to be integer64 but maxType=='%s' != REALSXP", j+1, type2char(maxType)); // # nocov + error(_("Internal error: column %d of result is determined to be integer64 but maxType=='%s' != REALSXP"), j+1, type2char(maxType)); // # nocov SEXP target; SET_VECTOR_ELT(ans, idcol+j, target=allocVector(maxType, nrow)); // does not initialize logical & numerics, but does initialize character and list if (!factor) copyMostAttrib(firstCol, target); // all but names,dim and dimnames; mainly for class. And if so, we want a copy here, not keepattr's SET_ATTRIB. if (factor && anyNotStringOrFactor) { - // in future warn, or use list column instead ... warning("Column %d contains a factor but not all items for the column are character or factor", idcol+j+1); + // in future warn, or use list column instead ... warning(_("Column %d contains a factor but not all items for the column are character or factor"), idcol+j+1); // some coercing from (likely) integer/numeric to character will be needed. But this coerce can feasibly fail with out-of-memory, so we have to do it up-front // before the savetl_init() because we have no hook to clean up tl if coerceVector fails. if (coercedForFactor==NULL) { coercedForFactor=PROTECT(allocVector(VECSXP, LENGTH(l))); nprotect++; } @@ -358,7 +358,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) const SEXP *sd = STRING_PTR(longestLevels); nLevel = allocLevel = longestLen; levelsRaw = (SEXP *)malloc(nLevel * sizeof(SEXP)); - if (!levelsRaw) { savetl_end(); error("Failed to allocate working memory for %d ordered factor levels of result column %d", nLevel, idcol+j+1); } + if (!levelsRaw) { savetl_end(); error(_("Failed to allocate working memory for %d ordered factor levels of result column %d"), nLevel, idcol+j+1); } for (int k=0; k0) savetl(s); @@ -379,13 +379,13 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (tl>=last) { // if tl>=0 then also tl>=last because last<=0 if (tl>=0) { sprintf(warnStr, // not direct warning as we're inside tl region - "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.", + _("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."), w+1, i+1, k+1, CHAR(s), longestW+1, longestI+1); } else { sprintf(warnStr, - "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.", + _("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."), w+1, i+1, CHAR(levelsD[k-1]), CHAR(s), CHAR(s), CHAR(levelsD[k-1]), longestW+1, longestI+1); // k>=1 (so k-1 is ok) because when k==0 last==0 and this branch wouldn't happen } @@ -429,7 +429,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) for (int k=0; k maxSize) maxSize=SIZEOF(v); if (ALTREP(v)) SET_VECTOR_ELT(x, i, copyAsPlain(v)); @@ -24,14 +24,14 @@ SEXP reorder(SEXP x, SEXP order) copySharedColumns(x); // otherwise two columns which point to the same vector would be reordered and then re-reordered, issues linked in PR#3768 } else { if (SIZEOF(x)!=4 && SIZEOF(x)!=8 && SIZEOF(x)!=16) - error("reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet supported (SIZEOF=%d)", type2char(TYPEOF(x)), SIZEOF(x)); - if (ALTREP(x)) error("Internal error in reorder.c: cannot reorder an ALTREP vector. Please see NEWS item 2 in v1.11.4 and report this as a bug."); // # nocov + error(_("reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet supported (SIZEOF=%d)"), type2char(TYPEOF(x)), SIZEOF(x)); + if (ALTREP(x)) error(_("Internal error in reorder.c: cannot reorder an ALTREP vector. Please see NEWS item 2 in v1.11.4 and report this as a bug.")); // # nocov maxSize = SIZEOF(x); nrow = length(x); ncol = 1; } - if (!isInteger(order)) error("order must be an integer vector"); - if (length(order) != nrow) error("nrow(x)[%d]!=length(order)[%d]",nrow,length(order)); + if (!isInteger(order)) error(_("order must be an integer vector")); + if (length(order) != nrow) error(_("nrow(x)[%d]!=length(order)[%d]"),nrow,length(order)); int nprotect = 0; if (ALTREP(order)) { order=PROTECT(copyAsPlain(order)); nprotect++; } // TODO: if it's an ALTREP sequence some optimizations are possible rather than expand @@ -45,7 +45,7 @@ SEXP reorder(SEXP x, SEXP order) const int end = i; for (int i=start; i<=end; i++) { int itmp = idx[i]-1; - if (itmpend) error("order is not a permutation of 1:nrow[%d]", nrow); + if (itmpend) error(_("order is not a permutation of 1:nrow[%d]"), nrow); } // Creorder is for internal use (so we should get the input right!), but the check above seems sensible. The for loop above should run // in neglible time (sequential with prefetch). It will catch NAs anywhere but won't catch duplicates. But doing so would be going too @@ -54,7 +54,7 @@ SEXP reorder(SEXP x, SEXP order) char *TMP = malloc(nrow * maxSize); // enough RAM for a copy of one column (of largest type). Writes into the [start,end] subset. Outside [start,end] is wasted in that rarer case // to save a "-start" in the deep loop below in all cases. - if (!TMP) error("Unable to allocate %d * %d bytes of working memory for reordering data.table", end-start+1, maxSize); + if (!TMP) error(_("Unable to allocate %d * %d bytes of working memory for reordering data.table"), end-start+1, maxSize); for (int i=0; imax since they should have been dealt with by convertNegAndZeroIdx() called ealier at R level. // single cache efficient sweep with prefetch, so very low priority to go parallel { - if (!isInteger(idx)) error("Internal error. 'idx' is type '%s' not 'integer'", type2char(TYPEOF(idx))); // # nocov + if (!isInteger(idx)) error(_("Internal error. 'idx' is type '%s' not 'integer'"), type2char(TYPEOF(idx))); // # nocov bool anyLess=false, anyNA=false; int last = INT32_MIN; int *idxp = INTEGER(idx), n=LENGTH(idx); @@ -118,11 +118,11 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) // + a little more efficient than negativeSubscript in src/main/subscript.c (it's private to R so we can't call it anyway) // allowOverMaxArg is false when := (test 1024), otherwise true for selecting - if (!isInteger(idx)) error("Internal error. 'idx' is type '%s' not 'integer'", type2char(TYPEOF(idx))); // # nocov - if (!isInteger(maxArg) || length(maxArg)!=1) error("Internal error. 'maxArg' is type '%s' and length %d, should be an integer singleton", type2char(TYPEOF(maxArg)), length(maxArg)); // # nocov - if (!isLogical(allowOverMax) || LENGTH(allowOverMax)!=1 || LOGICAL(allowOverMax)[0]==NA_LOGICAL) error("Internal error: allowOverMax must be TRUE/FALSE"); // # nocov + if (!isInteger(idx)) error(_("Internal error. 'idx' is type '%s' not 'integer'"), type2char(TYPEOF(idx))); // # nocov + if (!isInteger(maxArg) || length(maxArg)!=1) error(_("Internal error. 'maxArg' is type '%s' and length %d, should be an integer singleton"), type2char(TYPEOF(maxArg)), length(maxArg)); // # nocov + if (!isLogical(allowOverMax) || LENGTH(allowOverMax)!=1 || LOGICAL(allowOverMax)[0]==NA_LOGICAL) error(_("Internal error: allowOverMax must be TRUE/FALSE")); // # nocov int max = INTEGER(maxArg)[0], n=LENGTH(idx); - if (max<0) error("Internal error. max is %d, must be >= 0.", max); // # nocov includes NA which will print as INT_MIN + if (max<0) error(_("Internal error. max is %d, must be >= 0."), max); // # nocov includes NA which will print as INT_MIN int *idxp = INTEGER(idx); bool stop = false; @@ -146,7 +146,7 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) else if (elem>max && firstOverMax==0) firstOverMax=i+1; } if (firstOverMax && LOGICAL(allowOverMax)[0]==FALSE) { - error("i[%d] is %d which is out of range [1,nrow=%d]", firstOverMax, idxp[firstOverMax-1], max); + error(_("i[%d] is %d which is out of range [1,nrow=%d]"), firstOverMax, idxp[firstOverMax-1], max); } int countPos = n-countNeg-countZero-countNA; @@ -158,7 +158,7 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) if (firstNeg==0 && elem<0 && elem!=NA_INTEGER) firstNeg=i+1; i++; } - error("Item %d of i is %d and item %d is %d. Cannot mix positives and negatives.", firstNeg, idxp[firstNeg-1], firstPos, idxp[firstPos-1]); + error(_("Item %d of i is %d and item %d is %d. Cannot mix positives and negatives."), firstNeg, idxp[firstNeg-1], firstPos, idxp[firstPos-1]); } if (countNeg && countNA) { int i=0, firstNeg=0, firstNA=0; @@ -168,7 +168,7 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) if (firstNA==0 && elem==NA_INTEGER) firstNA=i+1; i++; } - error("Item %d of i is %d and item %d is NA. Cannot mix negatives and NA.", firstNeg, idxp[firstNeg-1], firstNA); + error(_("Item %d of i is %d and item %d is NA. Cannot mix negatives and NA."), firstNeg, idxp[firstNeg-1], firstNA); } SEXP ans; @@ -204,9 +204,9 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) } } if (countBeyond) - warning("Item %d of i is %d but there are only %d rows. Ignoring this and %d more like it out of %d.", firstBeyond, idxp[firstBeyond-1], max, countBeyond-1, n); + warning(_("Item %d of i is %d but there are only %d rows. Ignoring this and %d more like it out of %d."), firstBeyond, idxp[firstBeyond-1], max, countBeyond-1, n); if (countDup) - warning("Item %d of i is %d which removes that item but that has occurred before. Ignoring this dup and %d other dups.", firstDup, idxp[firstDup-1], countDup-1); + warning(_("Item %d of i is %d which removes that item but that has occurred before. Ignoring this dup and %d other dups."), firstDup, idxp[firstDup-1], countDup-1); int ansn = max-countRemoved; ans = PROTECT(allocVector(INTSXP, ansn)); int *ansp = INTEGER(ans); @@ -220,15 +220,15 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) static void checkCol(SEXP col, int colNum, int nrow, SEXP x) { - if (isNull(col)) error("Column %d is NULL; malformed data.table.", colNum); + if (isNull(col)) error(_("Column %d is NULL; malformed data.table."), colNum); if (isNewList(col) && INHERITS(col, char_dataframe)) { SEXP names = getAttrib(x, R_NamesSymbol); - error("Column %d ['%s'] is a data.frame or data.table; malformed data.table.", + error(_("Column %d ['%s'] is a data.frame or data.table; malformed data.table."), colNum, isNull(names)?"":CHAR(STRING_ELT(names,colNum-1))); } if (length(col)!=nrow) { SEXP names = getAttrib(x, R_NamesSymbol); - error("Column %d ['%s'] is length %d but column 1 is length %d; malformed data.table.", + error(_("Column %d ['%s'] is length %d but column 1 is length %d; malformed data.table."), colNum, isNull(names)?"":CHAR(STRING_ELT(names,colNum-1)), length(col), nrow); } } @@ -244,7 +244,7 @@ static void checkCol(SEXP col, int colNum, int nrow, SEXP x) SEXP subsetDT(SEXP x, SEXP rows, SEXP cols) { int nprotect=0; - if (!isNewList(x)) error("Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'", type2char(TYPEOF(rows))); // # nocov + if (!isNewList(x)) error(_("Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'"), type2char(TYPEOF(rows))); // # nocov if (!length(x)) return(x); // return empty list const int nrow = length(VECTOR_ELT(x,0)); @@ -257,10 +257,10 @@ SEXP subsetDT(SEXP x, SEXP rows, SEXP cols) { if (err!=NULL) error(err); } - if (!isInteger(cols)) error("Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'", type2char(TYPEOF(cols))); // # nocov + if (!isInteger(cols)) error(_("Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'"), type2char(TYPEOF(cols))); // # nocov for (int i=0; iLENGTH(x)) error("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]", i+1, this, LENGTH(x)); + if (this<1 || this>LENGTH(x)) error(_("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]"), i+1, this, LENGTH(x)); } int overAlloc = checkOverAlloc(GetOption(install("datatable.alloccol"), R_NilValue)); @@ -334,9 +334,9 @@ SEXP subsetVector(SEXP x, SEXP idx) { // idx is 1-based passed from R level bool anyNA=false, orderedSubset=false; int nprotect=0; if (isNull(x)) - error("Internal error: NULL can not be subset. It is invalid for a data.table to contain a NULL column."); // # nocov + error(_("Internal error: NULL can not be subset. It is invalid for a data.table to contain a NULL column.")); // # nocov if (check_idx(idx, length(x), &anyNA, &orderedSubset) != NULL) - error("Internal error: CsubsetVector is internal-use-only but has received negatives, zeros or out-of-range"); // # nocov + error(_("Internal error: CsubsetVector is internal-use-only but has received negatives, zeros or out-of-range")); // # nocov SEXP ans = PROTECT(allocVector(TYPEOF(x), length(idx))); nprotect++; copyMostAttrib(x, ans); subsetVectorRaw(ans, x, idx, anyNA); diff --git a/src/transpose.c b/src/transpose.c index 6f6acc1a38..aa52303ac6 100644 --- a/src/transpose.c +++ b/src/transpose.c @@ -6,17 +6,17 @@ SEXP transpose(SEXP l, SEXP fill, SEXP ignoreArg, SEXP keepNamesArg) { int nprotect=0; if (!isNewList(l)) - error("l must be a list."); + error(_("l must be a list.")); if (!length(l)) return(copyAsPlain(l)); if (!isLogical(ignoreArg) || LOGICAL(ignoreArg)[0]==NA_LOGICAL) - error("ignore.empty should be logical TRUE/FALSE."); + error(_("ignore.empty should be logical TRUE/FALSE.")); bool ignore = LOGICAL(ignoreArg)[0]; if (!(isNull(keepNamesArg) || (isString(keepNamesArg) && LENGTH(keepNamesArg)==1))) - error("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"); + error(_("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")); bool rn = !isNull(keepNamesArg); if (length(fill) != 1) - error("fill must be a length 1 vector, such as the default NA"); + error(_("fill must be a length 1 vector, such as the default NA")); R_len_t ln = LENGTH(l); // preprocessing @@ -25,7 +25,7 @@ SEXP transpose(SEXP l, SEXP fill, SEXP ignoreArg, SEXP keepNamesArg) { for (int i=0; imaxlen) maxlen=len; zerolen += (len==0); @@ -85,7 +85,7 @@ SEXP transpose(SEXP l, SEXP fill, SEXP ignoreArg, SEXP keepNamesArg) { } } break; default : - error("Unsupported column type '%s'", type2char(maxtype)); + error(_("Unsupported column type '%s'"), type2char(maxtype)); } UNPROTECT(1); // inside the loop to save the protection stack k++; diff --git a/src/types.c b/src/types.c index cbcf55c306..3418fc740c 100644 --- a/src/types.c +++ b/src/types.c @@ -52,7 +52,7 @@ void testRaiseMsg(ans_t *ans, int istatus, bool verbose) { } SEXP testMsgR(SEXP status, SEXP x, SEXP k) { if (!isInteger(status) || !isInteger(x) || !isInteger(k)) - error("internal error: status, nx, nk must be integer"); // # nocov + error(_("internal error: status, nx, nk must be integer")); // # nocov int protecti = 0; const bool verbose = GetVerbose(); int istatus = INTEGER(status)[0], nx = INTEGER(x)[0], nk = INTEGER(k)[0]; @@ -61,7 +61,7 @@ SEXP testMsgR(SEXP status, SEXP x, SEXP k) { SEXP ans = PROTECT(allocVector(VECSXP, nk * nx)); protecti++; ans_t *vans = (ans_t *)R_alloc(nx*nk, sizeof(ans_t)); if (verbose) - Rprintf("%s: allocating memory for results %dx%d\n", __func__, nx, nk); + Rprintf(_("%s: allocating memory for results %dx%d\n"), __func__, nx, nk); for (R_len_t i=0; i1 && LENGTH(order)!=nrow) error("Internal error: uniqlist has been passed length(order)==%d but nrow==%d", LENGTH(order), nrow); // # nocov + if (!isInteger(order)) error(_("Internal error: uniqlist has been passed a non-integer order")); // # nocov + if (LENGTH(order)<1) error(_("Internal error: uniqlist has been passed a length-0 order")); // # nocov + if (LENGTH(order)>1 && LENGTH(order)!=nrow) error(_("Internal error: uniqlist has been passed length(order)==%d but nrow==%d"), LENGTH(order), nrow); // # nocov bool via_order = INTEGER(order)[0] != -1; // has an ordering vector been passed in that we have to hop via? Don't use MISSING() here as it appears unstable on Windows unsigned long long *ulv; // for numeric check speed-up @@ -93,7 +93,7 @@ SEXP uniqlist(SEXP l, SEXP order) } } break; default : - error("Type '%s' not supported", type2char(TYPEOF(v))); // # nocov + error(_("Type '%s' not supported"), type2char(TYPEOF(v))); // # nocov } } else { // ncol>1 @@ -124,7 +124,7 @@ SEXP uniqlist(SEXP l, SEXP order) } break; default : - error("Type '%s' not supported", type2char(TYPEOF(v))); // # nocov + error(_("Type '%s' not supported"), type2char(TYPEOF(v))); // # nocov } } if (!b) { @@ -145,8 +145,8 @@ SEXP uniqlist(SEXP l, SEXP order) SEXP uniqlengths(SEXP x, SEXP n) { // seems very similar to rbindlist.c:uniq_lengths. TODO: centralize into common function - if (TYPEOF(x) != INTSXP) error("Input argument 'x' to 'uniqlengths' must be an integer vector"); - if (TYPEOF(n) != INTSXP || length(n) != 1) error("Input argument 'n' to 'uniqlengths' must be an integer vector of length 1"); + if (TYPEOF(x) != INTSXP) error(_("Input argument 'x' to 'uniqlengths' must be an integer vector")); + if (TYPEOF(n) != INTSXP || length(n) != 1) error(_("Input argument 'n' to 'uniqlengths' must be an integer vector of length 1")); R_len_t len = length(x); SEXP ans = PROTECT(allocVector(INTSXP, len)); for (R_len_t i=1; i= 1"); + if (!isInteger(cols) || lencols==0) error(_("cols must be an integer vector with length >= 1")); int *icols = INTEGER(cols); for (int i=0; incol) error("Item %d of cols is %d which is outside range of l [1,length(l)=%d]", i+1, elem, ncol); + if (elem<1 || elem>ncol) error(_("Item %d of cols is %d which is outside range of l [1,length(l)=%d]"), i+1, elem, ncol); } for (int i=1; i0); SEXP v, ans; - if (!isNewList(l) || length(l) < 1) error("Internal error: nestedid was not passed a list length 1 or more"); // # nocov + if (!isNewList(l) || length(l) < 1) error(_("Internal error: nestedid was not passed a list length 1 or more")); // # nocov R_len_t nrows = length(VECTOR_ELT(l,0)), ncols = length(cols); if (nrows==0) return(allocVector(INTSXP, 0)); R_len_t thisi, previ, ansgrpsize=1000, nansgrp=0; R_len_t *ansgrp = Calloc(ansgrpsize, R_len_t), starts, grplen; // #3401 fix. Needs to be Calloc due to Realloc below .. else segfaults. R_len_t ngrps = length(grps); bool *i64 = (bool *)R_alloc(ncols, sizeof(bool)); - if (ngrps==0) error("Internal error: nrows[%d]>0 but ngrps==0", nrows); // # nocov + if (ngrps==0) error(_("Internal error: nrows[%d]>0 but ngrps==0"), nrows); // # nocov R_len_t resetctr=0, rlen = length(resetvals) ? INTEGER(resetvals)[0] : 0; - if (!isInteger(cols) || ncols == 0) error("cols must be an integer vector of positive length"); + if (!isInteger(cols) || ncols == 0) error(_("cols must be an integer vector of positive length")); // mult arg enum {ALL, FIRST, LAST} mult = ALL; if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "all")) mult = ALL; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "first")) mult = FIRST; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "last")) mult = LAST; - else error("Internal error: invalid value for 'mult'. please report to data.table issue tracker"); // # nocov + else error(_("Internal error: invalid value for 'mult'. please report to data.table issue tracker")); // # nocov // integer64 for (int j=0; j= dtwiddle(xd, previ); } break; default: - error("Type '%s' not supported", type2char(TYPEOF(v))); // # nocov + error(_("Type '%s' not supported"), type2char(TYPEOF(v))); // # nocov } } if (b) break; @@ -346,8 +346,8 @@ SEXP nestedid(SEXP l, SEXP cols, SEXP order, SEXP grps, SEXP resetvals, SEXP mul SEXP uniqueNlogical(SEXP x, SEXP narmArg) { // single pass; short-circuit and return as soon as all 3 values are found - if (!isLogical(x)) error("x is not a logical vector"); - if (!isLogical(narmArg) || length(narmArg)!=1 || INTEGER(narmArg)[0]==NA_INTEGER) error("na.rm must be TRUE or FALSE"); + if (!isLogical(x)) error(_("x is not a logical vector")); + if (!isLogical(narmArg) || length(narmArg)!=1 || INTEGER(narmArg)[0]==NA_INTEGER) error(_("na.rm must be TRUE or FALSE")); bool narm = LOGICAL(narmArg)[0]==1; const R_xlen_t n = xlength(x); if (n==0) diff --git a/src/utils.c b/src/utils.c index e311c9a710..0825c399b9 100644 --- a/src/utils.c +++ b/src/utils.c @@ -70,7 +70,7 @@ bool allNA(SEXP x, bool errorForBadType) { return true; }} if (!errorForBadType) return false; - error("Unsupported type '%s' passed to allNA()", type2char(TYPEOF(x))); // e.g. VECSXP; tests 2116.16-18 + error(_("Unsupported type '%s' passed to allNA()"), type2char(TYPEOF(x))); // e.g. VECSXP; tests 2116.16-18 // turned off allNA list support for now to avoid accidentally using it internally where we did not intend; allNA not yet exported // https://github.com/Rdatatable/data.table/pull/3909#discussion_r329065950 } @@ -89,9 +89,9 @@ SEXP allNAR(SEXP x) { */ SEXP colnamesInt(SEXP x, SEXP cols, SEXP check_dups) { if (!isNewList(x)) - error("'x' argument must be data.table compatible"); + error(_("'x' argument must be data.table compatible")); if (!IS_TRUE_OR_FALSE(check_dups)) - error("'check_dups' argument must be TRUE or FALSE"); + error(_("'check_dups' argument must be TRUE or FALSE")); int protecti = 0; R_len_t nx = length(x); R_len_t nc = length(cols); @@ -107,35 +107,35 @@ SEXP colnamesInt(SEXP x, SEXP cols, SEXP check_dups) { ricols = cols; } else if (isReal(cols)) { if (!isRealReallyInt(cols)) - error("argument specifying columns is type 'double' and one or more items in it are not whole integers"); + error(_("argument specifying columns is type 'double' and one or more items in it are not whole integers")); ricols = PROTECT(coerceVector(cols, INTSXP)); protecti++; } int *icols = INTEGER(ricols); for (int i=0; inx) || (icols[i]<1)) - error("argument specifying columns specify non existing column(s): cols[%d]=%d", i+1, icols[i]); // handles NAs also + error(_("argument specifying columns specify non existing column(s): cols[%d]=%d"), i+1, icols[i]); // handles NAs also } } else if (isString(cols)) { SEXP xnames = PROTECT(getAttrib(x, R_NamesSymbol)); protecti++; if (isNull(xnames)) - error("'x' argument data.table has no names"); + error(_("'x' argument data.table has no names")); ricols = PROTECT(chmatch(cols, xnames, 0)); protecti++; int *icols = INTEGER(ricols); for (int i=0; i1?"s":""); + if (GetVerbose()) Rprintf(_("Found and copied %d column%s with a shared memory address\n"), nShared, nShared>1?"s":""); // GetVerbose() (slightly expensive call of all options) called here only when needed } } diff --git a/src/vecseq.c b/src/vecseq.c index 43c29dc430..9466c615b9 100644 --- a/src/vecseq.c +++ b/src/vecseq.c @@ -10,22 +10,22 @@ SEXP vecseq(SEXP x, SEXP len, SEXP clamp) // Specially for use by [.data.table after binary search. Now so specialized that for general use // bit::vecseq is recommended (Jens has coded it in C now). - if (!isInteger(x)) error("x must be an integer vector"); - if (!isInteger(len)) error("len must be an integer vector"); - if (LENGTH(x) != LENGTH(len)) error("x and len must be the same length"); + if (!isInteger(x)) error(_("x must be an integer vector")); + if (!isInteger(len)) error(_("len must be an integer vector")); + if (LENGTH(x) != LENGTH(len)) error(_("x and len must be the same length")); const int *ix = INTEGER(x); const int *ilen = INTEGER(len), nlen=LENGTH(len); int reslen = 0; for (int i=0; ilimit) error("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.", reslen, (int)limit); + if (limit<0) error(_("clamp must be positive")); + if (reslen>limit) error(_("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."), reslen, (int)limit); } SEXP ans = PROTECT(allocVector(INTSXP, reslen)); int *ians = INTEGER(ans); diff --git a/src/wrappers.c b/src/wrappers.c index af9ac39ccf..272355b35e 100644 --- a/src/wrappers.c +++ b/src/wrappers.c @@ -8,12 +8,12 @@ SEXP setattrib(SEXP x, SEXP name, SEXP value) { - if (!isString(name) || LENGTH(name)!=1) error("Attribute name must be a character vector of length 1"); + if (!isString(name) || LENGTH(name)!=1) error(_("Attribute name must be a character vector of length 1")); if (!isNewList(x) && strcmp(CHAR(STRING_ELT(name,0)),"class")==0 && isString(value) && LENGTH(value)>0 && (strcmp(CHAR(STRING_ELT(value, 0)),"data.table")==0 || strcmp(CHAR(STRING_ELT(value,0)),"data.frame")==0) ) { - error("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."); + error(_("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.")); } if (isLogical(x) && LENGTH(x)==1 && (x==ScalarLogical(TRUE) || x==ScalarLogical(FALSE) || x==ScalarLogical(NA_LOGICAL))) { // R's internal globals, #1281 @@ -56,10 +56,10 @@ SEXP setlistelt(SEXP l, SEXP i, SEXP value) { R_len_t i2; // Internal use only. So that := can update elements of a list of data.table, #2204. Just needed to overallocate/grow the VECSXP. - if (!isNewList(l)) error("First argument to setlistelt must be a list()"); - if (!isInteger(i) || LENGTH(i)!=1) error("Second argument to setlistelt must a length 1 integer vector"); + if (!isNewList(l)) error(_("First argument to setlistelt must be a list()")); + if (!isInteger(i) || LENGTH(i)!=1) error(_("Second argument to setlistelt must a length 1 integer vector")); i2 = INTEGER(i)[0]; - if (LENGTH(l) < i2 || i2<1) error("i (%d) is outside the range of items [1,%d]",i2,LENGTH(l)); + if (LENGTH(l) < i2 || i2<1) error(_("i (%d) is outside the range of items [1,%d]"),i2,LENGTH(l)); SET_VECTOR_ELT(l, i2-1, value); return(R_NilValue); } @@ -81,7 +81,7 @@ SEXP expandAltRep(SEXP x) // At R level (for example [.data.table) we use and benefit from altrep vectors very much. It's just as columns that we expand them. // See extensive discussion in issue #2866 - if (TYPEOF(x) != VECSXP) error("x isn't a VECSXP"); + if (TYPEOF(x) != VECSXP) error(_("x isn't a VECSXP")); for (int i=0; i