diff --git a/.dev/CRAN_Release.cmd b/.dev/CRAN_Release.cmd index b1b434c6f0..6355b1356f 100644 --- a/.dev/CRAN_Release.cmd +++ b/.dev/CRAN_Release.cmd @@ -1,3 +1,69 @@ +############################################### +# Updating translations +############################################### + +# 1) Update messages for new release +## (a) Update C template file: src/data.table.pot +## ideally, we are including _() wrapping in +## new PRs throughout dev cycle, and this step +## becomes about tying up loose ends +## Appending _() char array wrapping to all messages +## that might be shown to the user. This step is slightly +## too greedy, as it includes too many msg, some of which +## need not be translated [more work to do here to make +## this less manual] some things to watch out for: +## * quote embedded (and escaped) within message [could be fixed with smarter regex] +## * multi-line implicit-concat arrays (in C, `"a" "b"` is the same as `"ab"`) should be wrapped "on the outside" not individually +## * `data.table` shares some of its `src` with `pydatatable`, so the requirement to `#include ` before the `#define _` macro meant we need to be careful about including this macro only in the R headers for these files (hence I created `po.h`) +## * Can't use `_()` _inside_ another functional macro. Only wrap the string passed to the macro later. +for MSG in error warning DTWARN DTPRINT Rprintf STOP Error; + do for SRC_FILE in src/*.c; + # no inplace -i in default mac sed + do sed -E "s/$MSG[(]("[^"]*")/$MSG(_(\1)/g" $SRC_FILE > out; + mv out $SRC_FILE; + done +done + +## checking for other lines calling these that didn't get _()-wrapped +for MSG in error warning DTWARN DTPRINT Rprintf STOP Error; + do grep -Er "\b$MSG[(]" src --include=*.c | grep -v _ | grep -Ev "(?://|[*]).*$MSG[(]" + +## similar, but a bit more manual to check snprintf usage + +## look for char array that haven't been covered yet +grep -Er '"[^"]+"' src --include=*.c | grep -Fv '_("' | grep -v "#include" | grep -v '//.*".*"' + +## look for lines starting with a char array (likely continued from prev line & can be combined) +grep -Er '^\s*"' src/*.c + +## Now extract these messages with xgettext +cd src +xgettext --keyword=_ -o data.table.pot *.c +cd .. + +## (b) Update R template file: src/R-data.table.pot +## much easier, once the update_pkg_po bug is fixed +R --no-save +## a bug fix in R still hadn't made the 2019-12-12 release, +## so run the following to source the corrected function manually +STEM='https://raw.githubusercontent.com/wch/r-source/trunk/src/library/tools/R' +source(file.path(STEM, 'utils.R')) +source(file.path(STEM, 'xgettext.R')) +source(file.path(STEM, 'translations.R')) +## shouldn't be any errors from this... +update_pkg_po('.') +q() + +# 2) Open a PR with the new templates & contact the translators +# * zh_CN: +## Translators to submit commits with translations to this PR +## [or perhaps, if we get several languages, each to open +## its own PR and merge to main translation PR] + +## 3) Check validity +## update_pkg_po('.') to be run again for the PR +## [can this be done via Travis?] + ############################################### # Basic checks ############################################### 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 1fee0396a9..8cde3e3aee 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)) { @@ -820,7 +820,7 @@ replace_dot_alias = function(e) { if (!typeof(byval[[jj]]) %chin% ORDERING_TYPES) stop("column or expression ",jj," of 'by' or 'keyby' is type ",typeof(byval[[jj]]),". Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]") } tt = vapply_1i(byval,length) - if (any(tt!=xnrow)) stop("The items in the 'by' or 'keyby' list are length (",paste(tt,collapse=","),"). Each must be length ", xnrow, "; the same length as there are rows in x (after subsetting if i is provided).") + if (any(tt!=xnrow)) stop(gettextf("The items in the 'by' or 'keyby' list are length(s) (%s). Each must be length %d; the same length as there are rows in x (after subsetting if i is provided).", paste(tt, collapse=","), xnrow, domain='R-data.table')) if (is.null(bynames)) bynames = rep.int("",length(byval)) if (length(idx <- which(!nzchar(bynames))) && !bynull) { # TODO: improve this and unify auto-naming of jsub and bysub @@ -874,7 +874,7 @@ replace_dot_alias = function(e) { # attempt to auto-name unnamed columns for (jj in which(nm=="")) { thisq = q[[jj + 1L]] - if (missing(thisq)) stop("Item ", jj, " of the .() or list() passed to j is missing") #3507 + if (missing(thisq)) stop(gettextf("Item %d of the .() or list() passed to j is missing", jj, domain="R-data.table")) #3507 if (is.name(thisq)) nm[jj] = drop_dot(thisq) # TO DO: if call to a[1] for example, then call it 'a' too } diff --git a/R/devel.R b/R/devel.R index c82c62f136..8db74e47ce 100644 --- a/R/devel.R +++ b/R/devel.R @@ -13,7 +13,7 @@ dcf.repo = function(pkg, repo, field, type){ idx = file(file.path(contrib.url(repo, type=type),"PACKAGES")) on.exit(close(idx)) dcf = read.dcf(idx, fields=c("Package",field)) - if (!pkg %in% dcf[,"Package"]) stop("There is no ", pkg, " package in provided repository.") + if (!pkg %in% dcf[,"Package"]) stop(gettextf("There is no package %s in provided repository.", pkg, domain='R-data.table')) dcf[dcf[,"Package"]==pkg, field][[1L]] } diff --git a/R/groupingsets.R b/R/groupingsets.R index c39c6b2096..6281615dd5 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/last.R b/R/last.R index 8b26b92850..abf4050b40 100644 --- a/R/last.R +++ b/R/last.R @@ -35,7 +35,7 @@ last = function(x, n=1L, ...) { } } else { if (!requireNamespace("xts", quietly=TRUE)) - stop("'xts' class passed to data.table::last function but 'xts' is not available, you should have 'xts' installed already") # nocov + stop(gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::last", domain="R-data.table")) # nocov if (verbose) cat("last: using xts::last: is.xts(x)\n") xts::last(x, n=n, ...) @@ -76,7 +76,7 @@ first = function(x, n=1L, ...) { } } else { if (!requireNamespace("xts", quietly=TRUE)) - stop("'xts' class passed to data.table::first function but 'xts' is not available, you should have 'xts' installed already") # nocov + stop(gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::first", domain="R-data.table")) # nocov if (verbose) cat("first: using xts::first: is.xts(x)\n") xts::first(x, n=n, ...) diff --git a/R/onAttach.R b/R/onAttach.R index e3bf6ce04d..d0c535d65c 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/R/setkey.R b/R/setkey.R index 5caefcf68f..63c6155f68 100644 --- a/R/setkey.R +++ b/R/setkey.R @@ -251,7 +251,7 @@ setorder = function(x, ..., na.last=FALSE) # na.last=FALSE here, to be consistent with data.table's default # as opposed to DT[order(.)] where na.last=TRUE, to be consistent with base { - if (!is.data.frame(x)) stop("x must be a data.frame or data.table.") + if (!is.data.frame(x)) stop("x must be a data.frame or data.table") cols = substitute(list(...))[-1L] if (identical(as.character(cols),"NULL")) return(x) if (length(cols)) { @@ -357,7 +357,7 @@ CJ = function(..., sorted = TRUE, unique = FALSE) } } nrow = prod( vapply_1i(l, length) ) # lengths(l) will work from R 3.2.0 - if (nrow > .Machine$integer.max) stop("Cross product of elements provided to CJ() would result in ",nrow," rows which exceeds .Machine$integer.max == ",.Machine$integer.max) + if (nrow > .Machine$integer.max) stop(gettextf("Cross product of elements provided to CJ() would result in %.0f rows which exceeds .Machine$integer.max == %d", nrow, .Machine$integer.max, domain='R-data.table')) l = .Call(Ccj, l) setDT(l) l = setalloccol(l) # a tiny bit wasteful to over-allocate a fixed join table (column slots only), doing it anyway for consistency since diff --git a/R/test.data.table.R b/R/test.data.table.R index decf1c4b3c..33752545d5 100644 --- a/R/test.data.table.R +++ b/R/test.data.table.R @@ -43,7 +43,7 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F # nocov start fn2 = paste0(fn,".bz2") if (!file.exists(file.path(fulldir, fn2))) - stop("Neither ",fn," or ",fn2," exist in ",fulldir) + stop(gettextf("Neither %s nor %s exist in %s",fn, fn2, fulldir, domain="R-data.table")) fn = fn2 # nocov end # sys.source() below accepts .bz2 directly. 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..e52bcf8faf 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..f88de8edf3 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..6e524b3588 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..c5d63fb7d3 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 7fc969b55d..bc0c7b3220 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -2987,7 +2987,11 @@ test(1034, as.data.table(x<-as.character(sample(letters, 5))), data.table(V1=x)) DT[, l_1 := DT[, list(c=list(rep(i_1, sample(5,1)))), by = i_1]$c] # generate list cols DT[, l_2 := DT[, list(c=list(rep(c_1, sample(5,1)))), by = i_1]$c] - test(1035.01, melt(DT, id.vars=1:2, measure.vars=3:4), melt(DT, id.vars=c("i_1", "i_2"), measure.vars=c("f_1", "c_1"))) + test(1035.010, melt(DT, id.vars=1:2, measure.vars=3:4), melt(DT, id.vars=c("i_1", "i_2"), measure.vars=c("f_1", "c_1"))) + test(1035.011, melt(DT, id.vars=as.raw(0), measure.vars=3:4), + error="Unknown 'id.vars' type raw") + test(1035.012, melt(DT, id.vars=1:3, measure.vars=as.raw(0)), + error="Unknown 'measure.vars' type raw") ans1 = cbind(DT[, c(1,2,8), with=FALSE], variable=factor("l_1")) ans1[, value := DT$l_1] @@ -2998,14 +3002,19 @@ test(1034, as.data.table(x<-as.character(sample(letters, 5))), data.table(V1=x)) test(1035.03, melt(DT, id.vars=4, measure.vars=5:6, na.rm=TRUE, variable.factor=FALSE), ans2) DT2 <- data.table(x=1:5, y=1+5i) # unimplemented class - test(1035.04, melt(DT2, id.vars=1), error="Unknown column type 'complex'") + test(1035.040, melt(DT2, id.vars=1), error="Unknown column type 'complex'") + test(1035.041, melt(DT2, id.vars=as.raw(0)), error="Unknown 'id.vars' type raw") # more tests DT[, f_2 := factor(sample(letters, N), ordered=TRUE)] DT[, id := 1:N] ans1 = cbind(melt(DT, id.vars="id", measure.vars=5:6, value.name="value1"), melt(DT, id.vars=integer(0), measure.vars=7:8, value.name="value2")[, variable:=NULL]) levels(ans1$variable) = as.character(1:2) - test(1035.05, ans1, melt(DT, id.vars="id", measure.vars=list(5:6, 7:8))) + test(1035.050, ans1, melt(DT, id.vars="id", measure.vars=list(5:6, 7:8))) + ## use numeric index + test(1035.051, ans1, melt(DT, id.vars="id", measure.vars=list(c(5, 6), c(7, 8)))) + test(1035.052, melt(DT, id.vars="id", measure.vars=list(as.raw(0))), + error="Unknown 'measure.vars' type raw") test(1035.06, ans1, melt(DT, id.vars="id", measure.vars=list(5:6, 7:8), na.rm=TRUE)) # should've no effect test(1035.07, ans1, melt(DT, id.vars="id", measure.vars=patterns("d_", "l_"))) # melt retains ordered factors! @@ -3033,7 +3042,12 @@ test(1034, as.data.table(x<-as.character(sample(letters, 5))), data.table(V1=x)) # bug #699 - melt segfaults when vars are not in dt; was test 1316 x = data.table(a=c(1,2),b=c(2,3),c=c(3,4)) test(1035.14, melt(x, id.vars="d"), error="One or more values") - test(1035.15, melt(x, measure.vars="d"), error="One or more values") + test(1035.150, melt(x, measure.vars="d"), error="One or more values") + test(1035.151, melt(x, measure.vars=3L), + ans <- data.table(a=c(1, 2), b=c(2, 3), variable=factor('c'), value=c(3, 4))) + test(1035.152, melt(x, measure.vars=as.raw(0)), error="Unknown 'measure.vars' type raw") + test(1035.153, melt(x, measure.vars=3L, verbose=TRUE), ans, + output="'id.vars' is missing. Assigning all.*Assigned 'id.vars' are") test(1035.16, melt(x, id.vars="a", measure.vars="d"), error="One or more values") test(1035.17, melt(x, id.vars="d", measure.vars="a"), error="One or more values") @@ -3061,7 +3075,10 @@ test(1034, as.data.table(x<-as.character(sample(letters, 5))), data.table(V1=x)) # improper levels fix, #1359; was test 1563 dt = data.table(id=1:3, x=NA_character_, y=c('a', NA_character_, 'c')) - test(1035.22, melt(dt, id.vars="id", na.rm=TRUE), data.table(id=c(1L,3L), variable=factor(c("y", "y")), value=c("a", "c"))) + test(1035.220, melt(dt, id.vars="id", na.rm=TRUE), data.table(id=c(1L,3L), variable=factor(c("y", "y")), value=c("a", "c"))) + test(1035.221, melt(dt, id.vars=c("id", "id"), na.rm=TRUE), + output = 'Duplicate column names found', + data.table(id=c(1L,3L), id.1=c(1L, 3L), variable=factor(c("y", "y")), value=c("a", "c"))) # fixing segfault due to negative id and measure vars that I detected by accident; was test 1569 dt = data.table(x=1:5, y=6:10, z=11:15) @@ -3136,6 +3153,18 @@ Sep,33.5,19.4,15.7,11.9,0,100.8,100.8,0,12.7,12.7,0,174.1") test(1037.407, ans$variable, factor(c("1","1"))) test(1037.408, dim(ans<-melt(x, measure.vars=patterns("^y", "^z"), na.rm=TRUE, variable.factor=FALSE)), INT(2,5)) test(1037.409, ans$variable, c("1","1")) + + test(1037.410, melt(data.table(NULL), verbose=TRUE), data.table(NULL), + output="ncol(data) is 0. Nothing to melt") + test(1037.411, melt(x, id.vars=1L, measure.vars=2L, variable.name=c('a', 'b')), + error="'variable.name' must be a character/integer") + test(1037.412, melt(x, id.vars=1L, measure.vars=list(2L), value.name=c('a', 'b')), + error="When 'measure.vars' is a list, 'value.name'") + test(1037.413, melt(x, id.vars=1L, measure.vars=2L, value.name=c('a', 'b')), + error="When 'measure.vars' is either not specified or a character/integer") + x[ , r := as.raw(c(0, 1))] + test(1037.414, melt(x, id.vars='x1', measure.vars='r'), + error="Unknown column type 'raw' for column 'r'") } # sorting and grouping of Inf, -Inf, NA and NaN, #4684, #4815 & #4883 @@ -10059,7 +10088,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 +10931,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") @@ -13276,8 +13305,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') @@ -13860,7 +13889,7 @@ test(1984.05, DT[ , sum(b), keyby = c, verbose = TRUE], test(1984.06, DT[1:3, sum(a), by=b:c], data.table(b=10:8, c=1:3, V1=1:3)) test(1984.07, DT[, sum(a), by=call('sin',pi)], error='must evaluate to a vector or a list of vectors') test(1984.08, DT[, sum(a), by=as.raw(0)], error='column or expression.*type raw') -test(1984.09, DT[, sum(a), by=.(1,1:2)], error='The items.*list are length [(]1,2[)].*Each must be length 10; .*rows in x.*after subsetting') +test(1984.09, DT[, sum(a), by=.(1,1:2)], error='The items.*list are length[(]s[)] [(]1,2[)].*Each must be length 10; .*rows in x.*after subsetting') options('datatable.optimize' = Inf) test(1984.10, DT[ , 1, by = .(a %% 2), verbose = TRUE], data.table(a = c(1, 0), V1 = c(1, 1)), @@ -15575,7 +15604,7 @@ ord = 3:1 test(2069.25, forder(data.table(a=3:1), ord), 3:1) # dogroups.c coverage test(2069.26, data.table(c='1')[ , expression(1), by=c], error="j evaluates to type 'expression'") -test(2069.27, data.table(c='1', d=2)[ , d := .(NULL), by=c], error='RHS is NULL when grouping :=') +test(2069.27, data.table(c='1', d=2)[ , d := .(NULL), by=c], error='RHS of := is NULL during grouped assignment') test(2069.28, data.table(c='1', d=2)[ , c(a='b'), by=c, verbose=TRUE], output='j appears to be a named vector') test(2069.29, data.table(c = '1', d = 2)[ , .(a = c(nm='b')), by = c, verbose = TRUE], output = 'Column 1 of j is a named vector') DT <- data.table(a = rep(1:3, each = 4), b = LETTERS[1:4], z = 0:3 + (4:1)*1i) diff --git a/man/melt.data.table.Rd b/man/melt.data.table.Rd index e35aefbf1b..a9d69b5f66 100644 --- a/man/melt.data.table.Rd +++ b/man/melt.data.table.Rd @@ -3,7 +3,7 @@ \alias{melt} \title{Fast melt for data.table} \description{ -\code{melt} is \code{data.table}'s wide-to-long reshaping tool. +\code{melt} is \code{data.table}'s wide-to-long reshaping tool. We provide an S3 method for melting \code{data.table}s. It is written in C for speed and memory efficiency. Since \code{v1.9.6}, \code{melt.data.table} allows melting into multiple columns simultaneously. diff --git a/po/R-data.table.pot b/po/R-data.table.pot new file mode 100644 index 0000000000..10a5b19d45 --- /dev/null +++ b/po/R-data.table.pot @@ -0,0 +1,1750 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.9\n" +"POT-Creation-Date: 2019-12-29 22:35\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(s) (%s). Each must be length %d; the same length as there are rows in x (after subsetting if i is provided)." +msgstr "" + +msgid "Internal error: drop_dot passed" +msgstr "" + +msgid "items" +msgstr "" + +msgid "Item %d of the .() or list() passed to j is missing" +msgstr "" + +msgid "Different branches of j expression produced different auto-named columns:" +msgstr "" + +msgid "%s!=%s" +msgstr "" + +msgid "; using the most \"last\" names" +msgstr "" + +msgid "When .SDcols is a function, it is applied to each column; the output of this function must be a non-missing boolean scalar signalling inclusion/exclusion of the column. However, these conditions were not met for:" +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 "'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 "There is no package %s in provided repository." +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 "'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already" +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 "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 "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 "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 %d rows which exceeds .Machine$integer.max == %d" +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 %s nor %s exist in %s" +msgstr "" + +msgid "Failed after test" +msgstr "" + +msgid "before the next test() call in" +msgstr "" + +msgid "out of" +msgstr "" + +msgid ". Search" +msgstr "" + +msgid "for test number" +msgstr "" + +msgid "Timings count mismatch:" +msgstr "" + +msgid "vs" +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 "Argument 'nan' must be length 1" +msgstr "" + +msgid "Argument 'nan' must be NA or NaN" +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 "" + +msgid "%d variable not shown: %s\n" +msgid_plural "%d variables not shown: %s\n" +msgstr[0] "" +msgstr[1] "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po new file mode 100644 index 0000000000..e74646eb14 --- /dev/null +++ b/po/R-zh_CN.po @@ -0,0 +1,2339 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.5\n" +"POT-Creation-Date: 2019-12-29 22:35\n" +"PO-Revision-Date: 2019-11-16 18:37+0800\n" +"Last-Translator: Xianying Tan \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" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "data.table package loaded. When developing don't load package" +msgstr "data.table包已载入, 开发时无需载入" + +msgid "" +"Internal error -- difftime objects may not be added to IDate, but Ops " +"dispatch should have intervened to prevent this" +msgstr "" +"内部错误 -- 'difftime'对象可能不能被添加到IDate类型但是正确操作应该防止此行为" +"发生" + +msgid "binary + is not defined for \"IDate\" objects" +msgstr "没有为\"IDate\" 对象定义的'+'操作" + +msgid "can only subtract from \"IDate\" objects" +msgstr "只能从\"IDate\"对象中减去" + +msgid "Internal error: storage mode of IDate is somehow no longer integer" +msgstr "内部错误: IDate的存储模式不为整型" + +msgid "unary - is not defined for \"IDate\" objects" +msgstr "没有为\"IDate\" 对象定义的一元的'-'操作" + +msgid "" +"Internal error -- difftime objects may not be subtracted from IDate, but Ops " +"dispatch should have intervened to prevent this" +msgstr "" +"内部错误 -- 不能与IDate类型中减去'difftime'对象但是正确操作应该防止此行为发生" + +msgid "Valid options for ms are 'truncate'," +msgstr "'ms'有效的选项为'truncate'" + +msgid "'nearest', and 'ceil'." +msgstr "'nearest'和'ceil'" + +msgid "" +"as.data.table.array method should only be called for arrays with 3+ " +"dimensions; use the matrix method for 2-dimensional arrays" +msgstr "" +"请只对3维或以上的数组使用as.data.table.array方法对二维数组请使用matrix方法" + +msgid "" +"Argument 'value.name' must be scalar character, non-NA and at least one " +"character" +msgstr "参数'value.name'必须为标量字符或non-NA至少包含一个字符" + +msgid "Argument 'sorted' must be scalar logical and non-NA" +msgstr "参数'sorted'必须为标量逻辑或non-NA" + +msgid "Argument 'na.rm' must be scalar logical and non-NA" +msgstr "参数'na.rm'必须为标量逻辑或non-NA" + +msgid "Please provide either 'key' or 'sorted', but not both." +msgstr "请提供参数'key'或'sorted',但不可同时提供" + +msgid "Argument 'value.name' should not overlap with column names in result:" +msgstr "参数'value.name'不能与结果中已有列名重复" + +msgid "" +"POSIXlt column type detected and converted to POSIXct. We do not recommend " +"use of POSIXlt at all because it uses 40 bytes to store one date." +msgstr "" +"检测到使用了POSIXlt类型的列, 并转成POSIXctdata.table不建议使用POSIXlt对象, " +"因为其使用40字节来存储一个日期" + +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 "用NA填充" + +msgid "A column may not be called .SD. That has special meaning." +msgstr "无法将列命名为 .SD,因为 .SD 为特殊符号。" + +msgid "class must be length 1" +msgstr "class 的长度必须为 1" + +msgid "between has been passed an argument x of type logical" +msgstr "传入 between 的参数 x 为逻辑(logical)型" + +msgid "" +"'between' function the 'x' argument is a POSIX class while 'lower' was not, " +"coercion to POSIX failed with:" +msgstr "" +"'between' 中的 'x' 参数为 POSIX 类,而 'lower' 并不是,将 'lower' 自动转换成 " +"POSIX 失败:" + +msgid "" +"'between' function the 'x' argument is a POSIX class while 'upper' was not, " +"coercion to POSIX failed with:" +msgstr "" +"'between' 中的 'x' 参数为 POSIX 类,而 'upper' 并不是,将 'upper' 自动转换成 " +"POSIX 失败:" + +msgid "" +"'between' lower= and upper= are both POSIXct but have different tzone " +"attributes:" +msgstr "" +"'between' 中的 lower= 和 upper= 均为 POSIXct 类型但却有不同的时区属性" +"(tzone):" + +msgid ". Please align their time zones." +msgstr "。请确保二者的时区一致。" + +msgid "" +"'between' arguments are all POSIXct but have mismatched tzone attributes:" +msgstr "'between' 的参数均为 POSIXct 类型但时区属性(tzone)不匹配:" + +msgid ". The UTC times will be compared." +msgstr "。将采用 UTC 时间进行比较。" + +msgid "trying to use integer64 class when 'bit64' package is not installed" +msgstr "试图使用 intger64 类型但 'bit64' 包尚未安装" + +msgid "" +"Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" +msgstr "" +"对这种非数值(numeric)和非字符(character)的类型,尚未实现 NAbounds=TRUE 的" +"功能" + +msgid "Some lower>upper for this non-numeric and non-character type" +msgstr "" +"对于该非数值(numeric)和非字符(character)类型的输入,存在一部分下界" +"(lower)> 上界(upper)的情况" + +msgid "RHS has length()" +msgstr "右手侧(RHS)的长度为" + +msgid "; expecting length 2." +msgstr ";其长度应为 2。" + +msgid "c" +msgstr "c" + +msgid "Perhaps you meant %s?" +msgstr "或许你想用的是 %s?" + +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 "x." + +msgid "is type" +msgstr "的类型为" + +msgid "which is not supported by data.table join" +msgstr ",该类型无法用于 data.table 的联接" + +msgid "i." +msgstr "i." + +msgid "Attempting roll join on factor column when joining x." +msgstr "试图滚动联接(roll join)因子类型(factor)的列,这发生于将 x." + +msgid "to i." +msgstr "与 i." + +msgid ". Only integer, double or character columns may be roll joined." +msgstr "" +"联接时。但只有整数(integer)、双精度(double)或字符(character)类型的列可" +"以使用滚动联接(roll join)。" + +msgid "Incompatible join types: x." +msgstr "不兼容的联结类型: x。" + +msgid "(" +msgstr "(" + +msgid ") and i." +msgstr ")和 i。" + +msgid "). Factor columns must join to factor or character columns." +msgstr ")。 因子类型的列必须与因子类型或字符类型的列才可以联结" + +msgid ")" +msgstr ")" + +msgid "Incompatible join types:" +msgstr "不兼容的联结类型" + +msgid "is type integer64 but" +msgstr "是 integer64 类型但是" + +msgid "is type double and contains fractions" +msgstr "是 double 类型并且包含分数" + +msgid "roll is not implemented for non-equi joins yet." +msgstr "不等长联结还不能执行 roll " + +msgid "Column name '_nqgrp_' is reserved for non-equi joins." +msgstr "列名 '_nqgrp_' 是为不等长联结保留的" + +msgid "key argument of data.table() must be character" +msgstr "data.table() 的主参数必须是字符" + +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 "提供 by= 或 keyby= ,但两者不能同时存在" + +msgid "Ignoring keyby= because j= is not supplied" +msgstr "因为没有提供 j= ,所以忽略 keyby= " + +msgid "Ignoring by= because j= is not supplied" +msgstr "因为没有提供 j= ,所以忽略 by= " + +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 "" +"当提供 on= 而不提供 i= 的时候, on= 必须是带名称的 list 或者 data.table 或者 " +"data.frame,并且会调用自然联结(例如,按照共有名称联结),忽略 on= " + +msgid "'." +msgstr "'。" + +msgid "" +"i and j are both missing so ignoring the other arguments. This warning will " +"be upgraded to error in future." +msgstr "i 和 j 都缺少的时候忽略其他参数。将来此警告信息将升级为错误信息。" + +msgid "mult argument can only be 'first', 'last' or 'all'" +msgstr "mult 参数只能赋值为 'first', 'last' 或 'all'" + +msgid "" +"roll must be a single TRUE, FALSE, positive/negative integer/double " +"including +Inf and -Inf or 'nearest'" +msgstr "" +"roll 必须是单个参数,例如 TRUE, FALSE, 正或负的 integer 或 double包括 " +"+Inf , -Inf 或 'nearest'" + +msgid "roll is '" +msgstr "roll 是" + +msgid "' (type character). Only valid character value is 'nearest'." +msgstr "'(字符类型)。 唯一有效的字符值是'nearest'。" + +msgid "rollends must be a logical vector" +msgstr "rollends必须是一个逻辑向量" + +msgid "rollends must be length 1 or 2" +msgstr "rollends 的长度必须是 1 或者 2" + +msgid "" +"nomatch= must be either NA or NULL (or 0 for backwards compatibility which " +"is the same as NULL)" +msgstr "nomatch= 必须是 NA 或 NULL (或者在向后兼容的情形下为 0,这等同于 NULL)" + +msgid "which= must be a logical vector length 1. Either FALSE, TRUE or NA." +msgstr "which= 必须是一个长度为 1 的逻辑向量。其取值为 FALSE,TRUE 或者 NA。" + +msgid "which==" +msgstr "which==" + +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 "" +"(表示行数会被返回) 但是 j 也被提供了。你可能需要行数或者是 j 的结果,但是只能" +"返回一种结果。" + +msgid "" +"which=NA with nomatch=0 would always return an empty vector. Please change " +"or remove either which or nomatch." +msgstr "" +"同时使用 which=NA 和 nomatch=0 会得到一个空向量。请改变或者是移除 which或 " +"nomatch 的取值" + +msgid "j must be provided when with=FALSE" +msgstr "如果with=FALSE(假),j必须要赋值" + +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 "内部错误: DT[, ..var]应该被分支处理中。" + +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 "" +"' 并没有存在于调用环境中。之所以在调用环境中搜索是因为你使用了with=FALSE。请" +"使用 .. 符号前缀并且移除 with=FALSE。" + +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 "" +"用 {} 套用 := 可行,但是 {} 中只能有 := 。而你现在 {} 中还有其他的参数。请尝" +"试将 {} 置于 := 的RHS之上;比如,DT[,someCol:={tmpVar1<-...; tmpVar2<-...; " +"tmpVar1*tmpVar2}" + +msgid "" +":= with keyby is only possible when i is not supplied since you can't setkey " +"on a subset of rows. Either change keyby to by or remove i" +msgstr "" +":=和keyby的组合只有在i没有赋值下才合理存在。因为你不能在一个行的子集调用" +"setkey。要么把keyby换成by或者是移除i" + +msgid "nomatch isn't relevant together with :=, ignoring nomatch" +msgstr "nomatch 并不和 := 有任何的相关,将忽略nomatch" + +msgid "" +"not-join '!' prefix is present on i but nomatch is provided. Please remove " +"nomatch." +msgstr "" +"not-join '!' 前缀在 i 中存在,但是 nomatch 也被提供了。需要移除nomatch。" + +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 "" +"当DT[...]的第一个参数是一个单个的符号(e.g. DT[var]),data.table会在调用环境中" +"搜寻var。" + +msgid "" +"i is invalid type (matrix). Perhaps in future a 2 column matrix could return " +"a list of elements of DT (in the spirit of A[B] in FAQ 2.14). Please report " +"to data.table issue tracker if you'd like this, or add your comments to FR " +"#657." +msgstr "" +"i不是一个有效的类型(矩阵)。也许在以后一个包含两列的矩阵会返回包含一串元素的" +"DT (请参考问答集2.14的A[B])。如果你有需求,请将此问题汇报给data.table 问题追" +"踪器或者是在FR中留下你的想法" + +msgid "" +"When i is a data.table (or character vector), the columns to join by must be " +"specified using 'on=' argument (see ?data.table), by keying x (i.e. sorted, " +"and, marked as sorted, see ?setkey), or by sharing column names between x " +"and i (i.e., a natural join). Keyed joins might have further speed benefits " +"on very large data due to x being sorted in RAM." +msgstr "" +"但i是一个 data.table (或者是字符向量),必须使用 'on=' 参数指明参与连接的列 " +"(参见 ?data.table),可以是keying x(比如,已排序过,和标记已排序过,请参见?" +"setkey),或者是在x和i共用列的名字(比如,自然连接)。如果x有在内存被排序过," +"Keyed连接的速度会在非常大的数据上有较明显的提高。" + +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 "内部错误:目前尚无法对次键使用by=.EACH命令" + +msgid "Internal error. irows has length in by=.EACHI" +msgstr "内部错误:by=.EACHI 中 irows 有长度" + +msgid "logical error. i is not a data.table, but 'on' argument is provided." +msgstr "逻辑错误。当 i 并非一个 data.table时,不应提供'on'参数" + +msgid "i has evaluated to type" +msgstr "i 运算结果为类型" + +msgid ". Expecting logical, integer or double." +msgstr "。期望布尔类型,整型或浮点型。" + +msgid "i evaluates to a logical vector length" +msgstr "i 为一个布尔类型向量的长度。" + +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 "" +"行。不再允许布尔值 i 循环补齐,尽管这样有些许便利,但会隐藏更多的 bug,得不偿" +"失。若确实需要循环补齐,请直接使用 rep(...,length=.N)。" + +msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" +msgstr "内部错误。原因可能为:notjoin 而非 byjoin;非整数;nomatch 为空" + +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 "" +"2014年10月发布的1.9.4版本中,with=FALSE 和 := 共用的用法已被弃用。请把 := 左" +"侧部分打上括号;例如,DT[,(myVar):=sum(b),by=a]对 myVar 中的列名进行赋值。输" +"入 ?':=' 参看其他的例子。正如2014年的版本中所说明的,现在这种用法会出现警告。" + +msgid "" +"with=FALSE ignored, it isn't needed when using :=. See ?':=' for examples." +msgstr "" +"当使用 :=. 的时候,with=FALSE 是多余的,会被忽略。输入 ?':=' 参看例子。" + +msgid "column(s) not removed because not found:" +msgstr "列未被删除因为不存在:" + +msgid "column(s) not found:" +msgstr "列不存在" + +msgid "of j is" +msgstr "j 是" + +msgid "which is outside the column number range [1,ncol=" +msgstr "不在列索引范围内 [1,ncol=" + +msgid "]" +msgstr "]" + +msgid "j mixes positives and negatives" +msgstr "j 中同时存在正数和负数" + +msgid "" +"When with=FALSE, j-argument should be of type logical/character/integer " +"indicating the columns to select." +msgstr "当 with=FALSE,参数 j 必须为布尔型/字符型/整型之一,表征要选择的列。" + +msgid "by=c(...), key(...) or names(...) must evaluate to 'character'" +msgstr "by=c(...), key(...) 或 names(...) 只接受 'character' " + +msgid "'by' is a character vector length" +msgstr "'by' 是一个字符型向量,长度为" + +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 "" +"但是其中包含一个或多个逗号。请传入一个列名组成的向量(可以包含空格,但是不能" +"包含逗号),或传入一个长度为1,由逗号分隔的列名组成的向量输入 ?data.table查看" +"其他的选项。" + +msgid "Internal error: irows isn't integer" +msgstr "内部错误:irows 不是整型" + +msgid "" +"'by' appears to evaluate to column names but isn't c() or key(). Use " +"by=list(...) if you can. Otherwise, by=eval" +msgstr "" +"传递给 'by' 参数的似乎是列名,但没有用 c() 或者 key() 函数。如若可以,请使用" +"by=list(...)。此外,by=eval" + +msgid "" +"should work. This is for efficiency so data.table can detect which columns " +"are needed." +msgstr "" +"应该是可行的。这样做是出于性能考虑,凭此 data.table 可以判断哪些列是需要的。" + +msgid "" +"'by' or 'keyby' must evaluate to a vector or a list of vectors (where 'list' " +"includes data.table and data.frame which are lists, too)" +msgstr "" +"'by' 或者 'keyby' 参数只接受一个向量或由向量组成的列表(这里 'list'包含 data." +"table 和 data.frame,这二者本质也是列表" + +msgid "column or expression" +msgstr "列或者表达式" + +msgid "of 'by' or 'keyby' is type" +msgstr "传递给 'by' 和 'keyby' 参数的类型是" + +msgid "" +". Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]" +msgstr "。请勿引用列名。用法:DT[,sum(colC),by=list(colA,month(colB))]" + +msgid "" +"The items in the 'by' or 'keyby' list are length(s) (%s). Each must be " +"length %d; the same length as there are rows in x (after subsetting if i is " +"provided)." +msgstr "在'by'或'keyby'列表中的项长度为 %s。每一项的长度须均为%d,即应与 x (或经 i 筛选后的子集)中所包含行数相同。" + +msgid "Internal error: drop_dot passed" +msgstr "内部错误:drop_dot 传入的参数有" + +msgid "items" +msgstr "项" + +msgid "Item %d of the .() or list() passed to j is missing" +msgstr "传递给j的 .() 或 list()中第%d项缺失" + +msgid "Different branches of j expression produced different auto-named columns:" +msgstr "j表达式中的不同分支自动生成的列名不同:" + +msgid "%s!=%s" +msgstr "%s!=%s" + +msgid "; using the most \"last\" names" +msgstr ";将使用最晚生成的名字" + +msgid "When .SDcols is a function, it is applied to each column; the output of this function must be a non-missing boolean scalar signalling inclusion/exclusion of the column. However, these conditions were not met for:" +msgstr "当传入 .SDcols 的参数为一个方程时,该方程将应用于每一列,并须返回单个非缺失值的布尔值指示该列是否应当被包含/排除。然而上述条件对如下列并不满足:" + +msgid ".SDcols missing at the following indices:" +msgstr ".SDcols 的如下位置为缺失值:" + +msgid ".SDcols is numeric but has both +ve and -ve indices" +msgstr ".SDcols 为数值,但同时具有 +ve 和 -ve 索引" + +msgid ".SDcols is numeric but out of bounds [1," +msgstr ".SDcols 为数值但超出了 [1," + +msgid "] at:" +msgstr "] 的范围:" + +msgid ".SDcols should be column numbers or names" +msgstr ".SDcols 应为列数或是列名" + +msgid "Some items of .SDcols are not column names:" +msgstr ".SDcols 中的部份项目不是列名:" + +msgid "" +"This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?" +"data.table." +msgstr "此处 j 不使用 .SD 但提供了 .SDcols ,因此忽略 .SDcols详见 ?data.table" + +msgid "" +".SD is locked. Using := in .SD's j is reserved for possible future use; a " +"tortuously flexible way to modify by group. Use := in j directly to modify " +"by group by reference." +msgstr "" +".SD 已锁定,在 .SD 的 j 中使用 := 进行分组修改是较不直观的方式此功能被保留" +"以供未来使用请直接在 j 中使用 := 依照引用进行分组修改" + +msgid "In `:=`(col1=val1, col2=val2, ...) form, all arguments must be named." +msgstr "在`:=`(col1=val1, col2=val2, ...) 中,所有参数必须被指名" + +msgid "" +"LHS of := must be a symbol, or an atomic vector (column names or positions)." +msgstr ":= 的 LHS 必须是符号或是原子向量(列名或是列的位置)" + +msgid "" +"LHS of := appears to be column positions but are outside [1,ncol] range. New " +"columns can only be added by name." +msgstr ":= 的 LHS 是列的位置但超出了 [1,ncol] 的范围新列只能以名称的方式新增" + +msgid "" +"LHS of := isn't column names ('character') or positions ('integer' or " +"'numeric')" +msgstr ":= 的 LHS 不是列名('字符')或列的位置('整数'或'数值')" + +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 "" +"侦测到无效的 .internal.selfref ,已藉由获取 data.table 的(浅层)副本的方式修复" +"以便 := 能利用引用加入新列在过去的某个时间点,此 data.table 已被 R 复制(或是" +"以 structure()等方式手动生成)请避免 names<- 与 attr<- 等目前(与偶发)可能会在 " +"R 中复制整个data.table的操作请改用 set* 语法以避免复制,详见 ?set、?setnames " +"及 ?setattr如果以上讯息无法提供帮助,请回报你的案例至 data.table 问题追踪以助" +"于修复根本原因或改进本讯息" + +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 "" +"无法指定配置不足的递归索引列表-- L[[i]][,:=] 语法只有在 i 长度为1时有效,但它" +"的長度" + +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 "" +"侦测到使用 strptime() ,已用 as.POSIXct() 包裹这么做是为了尽量避免列被指定为 " +"POSIXltPOSIXlt用40个以上的位元组储存日期(相较于 POSIXct 只用8位元组)请使用 " +"as.POSIXct() 以避免本警告 (此函数会根据需求在内部调用 strptime())" + +msgid "" +"' is not found in calling scope. Looking in calling scope because this " +"symbol was prefixed with .. in the j= parameter." +msgstr "" +"' 未能在调用范围 (calling scope) 中找到,请查看调用范围因为 j= 的参数以 .. " +"作为前缀" + +msgid "Internal error: xcolAns does not pass checks:" +msgstr "内部错误 : xcolAns 无法通过检查:" + +msgid "" +"Internal error: irows is NULL when making join result at R level. Should no " +"longer happen now we use CsubsetDT earlier." +msgstr "" +"内部错误 : 在 R 生成连接结果时,irows为 NULL 我们已使用了 CsubsetDT,现在不应" +"该再发生了" + +msgid "j (the 2nd argument inside [...]) is a single symbol but column name '" +msgstr "j ( [...] 中的第二顺位参数) 是单个符号而列名 '" + +msgid "' is not found. Perhaps you intended DT[, .." +msgstr "' 未被找到,也许你打算 DT[, .." + +msgid "" +"]. This difference to data.frame is deliberate and explained in FAQ 1.1." +msgstr "] ,在FAQ 1.1 中有解释dat.table与data.frame的差别" + +msgid "" +"Internal error: j has created a data.table result containing a NULL column" +msgstr "内部错误 : j 创建了一个有列为 NULL 的 data.table" + +msgid "" +"The column '.N' can't be grouped because it conflicts with the special .N " +"variable. Try setnames(DT,'.N','N') first." +msgstr "" +"无法对 '.N' 列进行分组,因为与 data.table 特有的 .N 变量冲突请先尝试 " +"setnames(DT,'.N','N')" + +msgid "" +"The column '.I' can't be grouped because it conflicts with the special .I " +"variable. Try setnames(DT,'.I','I') first." +msgstr "" +"无法对 '.I' 列进行分组,因为与 data.table 特有的 .I 变量冲突请先尝试 " +"setnames(DT,'.I','I')" + +msgid "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" +msgstr "逻辑错误: i 不是data.table,但 mult='all' 及 'by'=.EACHI" + +msgid "Internal error: by= is missing" +msgstr "内部错误 : 缺少 by=" + +msgid "Internal error: byindex not the index name" +msgstr "内部错误 : byindex 不是索引名称" + +msgid "Internal error: byindex not found" +msgstr "内部错误 : 找不到 byindex" + +msgid "" +"Unable to optimize call to mean() and could be very slow. You must name 'na." +"rm' like that otherwise if you do mean(x,TRUE) the TRUE is taken to mean " +"'trim' which is the 2nd argument of mean. 'trim' is not yet optimized." +msgstr "" +"无法优化对 mean() 的调用,这可能导致运行非常缓慢您必须使用 na.rm=TRUE,否则如" +"果您直接使用 mean(x,TRUE)会被认定为 trim=TRUE,trim 是 mean() 中尚未被优化的" +"第二顺位参数" + +msgid "Internal error: length(irows)!=length(o__)" +msgstr "内部错误:length(irows)!=length(o__)" + +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 "" +"因为`:=`与`keyby=`一起使用且`keyby=`含有表达式, 所以代码跳过了一般`keyby=`会" +"执行的`setkey()` -- 代码只执行了`by=`。若要避免此警告, 请使用`by=`, 或者提供" +"`keyby=`现有的列名" + +msgid "Internal error: jvnames is length" +msgstr "内部错误:jvnames 是长度" + +msgid "but ans is" +msgstr "但是ans(答案)是" + +msgid "and bynames is" +msgstr "同时bynames是" + +msgid "rownames and rownames.value cannot both be used at the same time" +msgstr "rownames和rownames.value 不能同时使用" + +msgid "length(rownames)==" +msgstr "length(rownames)== (行名长度==)" + +msgid "but nrow(DT)==" +msgstr "但是nrow(DT)==" + +msgid "" +". The rownames argument specifies a single column name or number. Consider " +"rownames.value= instead." +msgstr "。 rownames参数为单一列名或单一数值。请考虑使用`rownames.values=`。" + +msgid "" +"length(rownames)==0 but should be a single column name or number, or NULL" +msgstr "" +"行名长度为零,`length(rownames)==0`,但应该为单一列名,单一数值,或NULL" + +msgid "rownames is TRUE but key has multiple columns" +msgstr "rownames是TRUE但key不只一个列" + +msgid "; taking first column x[,1] as rownames" +msgstr "; 取第一列, `column x[,1]`, 为rownames" + +msgid "'" +msgstr "'" + +msgid "' is not a column of x" +msgstr "' 不是x的一个列" + +msgid "as.integer(rownames)==" +msgstr "as.integer(rownames)==" + +msgid "]." +msgstr "]." + +msgid "length(rownames.value)==" +msgstr "length(rownames.value)==" + +msgid "but should be nrow(x)==" +msgstr "但应该是nrow(x)==" + +msgid "" +"When i is a matrix in DT[i]<-value syntax, it doesn't make sense to provide j" +msgstr "当i以`DT[i]<-value`的形式出现,不需要提供j" + +msgid "j must be an atomic vector, see ?is.atomic" +msgstr "j必须是原子向量,请参考 ?is.atomic" + +msgid "NA in j" +msgstr "j里有NA" + +msgid "j must be vector of column name or positions" +msgstr "j 必须是列名(column name)或列位(column position)的向量" + +msgid "" +"Attempt to assign to column position greater than ncol(x). Create the column " +"by name, instead. This logic intends to catch (most likely) user errors." +msgstr "" +"试图指定至比ncol(x)还大的列位(column position)。请指定至列名(column name)。一" +"般来说用列名取代列位能解决大部分错误。" + +msgid "" +"data.table inherits from data.frame (from v1.5), but this data.table does " +"not. Has it been created manually (e.g. by using 'structure' rather than " +"'data.table') or saved to disk using a prior version of data.table?" +msgstr "" +"data.table继承自data.frame(v1.5),但这个data.table并不是。请检查这个data." +"table是不是手动创建的(可能创建时使用了`structure()`而非`data.table()`),或者" +"是不是使用了更早的data.table版本创建后存到硬盘了。" + +msgid "attempting to assign invalid object to dimnames of a data.table" +msgstr "试图指定无效对象给data.table的维度名(dimnames)" + +msgid "data.tables do not have rownames" +msgstr "data.tables没有rownames" + +msgid "Can't assign" +msgstr "无法指定" + +msgid "colnames to a" +msgstr "列名为一个" + +msgid "-column data.table" +msgstr "-列 data.table" + +msgid "'subset' must evaluate to logical" +msgstr "'subset' 必须为logical" + +msgid "Argument 'invert' must be logical TRUE/FALSE" +msgstr " 'invert' 的参数是逻辑值,必须是 TRUE/FALSE" + +msgid "x argument must be a data.table" +msgstr "参数 x 必须是一个 data.table" + +msgid "group length is 0 but data nrow > 0" +msgstr "分组长度为0,但 data nrow > 0" + +msgid "" +"passing 'f' argument together with 'by' is not allowed, use 'by' when split " +"by column in data.table and 'f' when split by external factor" +msgstr "" +"不可同时指定参数 'f' 和参数 'by' ,当利用 data.table的纵列进行数据分割时,请使" +"用参数 'by';当利用外部因子进行数据分割时,请使用参数 'f'" + +msgid "Either 'by' or 'f' argument must be supplied" +msgstr "必须提供参数 'by' 或参数 'f'" + +msgid "Column '.ll.tech.split' is reserved for split.data.table processing" +msgstr "为 split.data.table 进程,纵列 '.ll.tech.split' 被保存" + +msgid "Column '.nm.tech.split' is reserved for split.data.table processing" +msgstr "为 split.data.table 进程,纵列 '.nm.tech.split' 被保存" + +msgid "Argument 'by' must refer to column names in x" +msgstr "参数 'by' 只适用于 x 中的列名" + +msgid "" +"Argument 'by' must refer only to atomic-type columns, but the following " +"columns are non-atomic:" +msgstr "参数 'by' 只适用于原子类型的纵列,但现在关联的纵列不是原子类型" + +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 "" +"浅拷贝(shallow copy)只是列指针向量的拷贝,因此仅对 data.table 有意义,而 x " +"不是 data.table" + +msgid "setalloccol attempting to modify `*tmp*`" +msgstr "setalloccol 试图修改 '*tmp*'" + +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 "" +"输入值是一个指向与R全局值相同位置的长度为1的逻辑值。因此,该属性是通过副本," +"而不是reference 的形式设置。您需要将结果分配回一个变量,参看 issue #1281" + +msgid "x is not a data.table or data.frame" +msgstr "x 不是 data.table 或 data.frame." + +msgid "x has" +msgstr "x 有" + +msgid "columns but its names are length" +msgstr " 列,但其列名的数为 " + +msgid "Passed a vector of type '" +msgstr "传递了一个向量,向量类型是;" + +msgid "'. Needs to be type 'character'." +msgstr ". 需要是 'character' 类型." + +msgid "names to a" +msgstr "命名" + +msgid "column data.table" +msgstr "data.table 的纵列" + +msgid "'new' is not a character vector or a function" +msgstr "'new' 既不是特征向量也不是 function" + +msgid "NA in 'new' at positions" +msgstr "在 'new' 中有NA值" + +msgid "Some duplicates exist in 'old':" +msgstr "在'old' 中存在重复名称" + +msgid "'old' is type" +msgstr "'old' 的类型是" + +msgid "but should be integer, double or character" +msgstr "应该为整型,浮点型或者字符型" + +msgid "'old' is length" +msgstr "'old' 长度为" + +msgid "but 'new' is length" +msgstr "'new' 的长度为" + +msgid "NA (or out of bounds) in 'old' at positions" +msgstr "NA(或超出界限)出现在'old' 的位置" + +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 "old中的其他项在列名中出现重复" + +msgid "Items of 'old' not found in column names:" +msgstr "在列名中未找到 'old' 有关项" + +msgid ". Consider skip_absent=TRUE." +msgstr "尝试 skip_absent=TRUE" + +msgid "Internal error: length(i)!=length(new)" +msgstr "内部错误:length(i)!=length(new)" + +msgid "x has some duplicated column name(s):" +msgstr "x 有多个重复列名:" + +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 "" +"idcol必须为逻辑型向量或长度为1的字符型向量.如果逻辑值为TRUEid 列会命名为'.id'" + +msgid "use.names=NA invalid" +msgstr "use.names=NA 无效赋值" + +msgid "" +"use.names='check' cannot be used explicitly because the value 'check' is new " +"in v1.12.2 and subject to change. It is just meant to convey default " +"behavior. See ?rbindlist." +msgstr "" +"请勿直接使用use.names='check',因为值'check'为新增在v1.12.2中后续有所变化,仅" +"用表示默认模式详见 ?rbindlist" + +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 "" +"检查是否is.data.table(DT) == TRUE,否则,:= and `:=`(...) 为被界定在j使用,仅一" +"次以特别的方式使用,详见help(\":=\")" + +msgid "" +"setDF only accepts data.table, data.frame or list of equal length as input" +msgstr "setDF仅允许data.table,data.frame或者同样长度的列表作为输入" + +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 "'setDF'中的参数'x'的所有元素必须同等长度" + +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 "' 为引用形式的 data.table,因为绑定被锁定了。很有可能 '" + +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 "" +"' 存在于一个被锁定的包(或环境)中导致无法修改其绑定的变量。可以尝试复制对象" +"(object)到你的现有环境,如:var <- copy(var) 然后再使用 setDT。" + +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 "" +"。setDT 会原样保留这些列但后续的操作如编组(grouping)和联接(joining)可能会" +"失败。请考虑使用 as.data.table() 因为它会为每个内嵌列建立一个新列。" + +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 "" +"属于 POSIXlt 类型。请使用 as.POSIXct 转换为 POSIXct 并再次执行setDT。我们非常" +"不推荐使用 POSIXlt 因为它要用 40 字节来存储一个日期。" + +msgid "" +"All elements in argument 'x' to 'setDT' must be of same length, but the " +"profile of input lengths (length:frequency) is:" +msgstr "" +"'setDT' 的参数 'x' 中所有的元素都必须是同一长度,但输入长度的概况(长度" +"(length):频率(frequency))是:" + +msgid "%s:%d" +msgstr "%s:%d" + +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 "" +"'setDT' 参数 'x' 应为一个列表('list'),数据框('data.frame')或 'data." +"table'" + +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 "'prefix' 必须为 空(NULL)或者长度为 1 的字符向量。" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense." +msgstr "x 是单个向量,非空的 'cols' 没有意义。" + +msgid "x is a list, 'cols' cannot be 0-length." +msgstr "x 是一个列表(list),'cols' 长度不能为0。" + +msgid "RHS of" +msgstr "右手侧(RHS)" + +msgid "is length" +msgstr "长度为" + +msgid "which is not 1 or nrow (" +msgstr "其非 1 或 总行数 nrow (" + +msgid "" +"). For robustness, no recycling is allowed (other than of length 1 RHS). " +"Consider %in% instead." +msgstr "" +")。考虑到程序的稳健性,只有在右侧元素长度为 1 的情况下,我们才会对之进行循" +"环。考虑改用 %in% 。" + +msgid "" +"Internal error in .isFastSubsettable. Please report to data.table developers" +msgstr ".isFastSubsettable 产生了内部错误。请向 data.table 开发者报告" + +msgid "" +"'on' argument should be a named atomic vector of column names indicating " +"which columns in 'i' should be joined with which columns in 'x'." +msgstr "" +"'on' 参数应为一个有子项名字的原子列名向量,指明'i' 中的哪些列应与 'x' 中的哪" +"些列联接。" + +msgid "Found more than one operator in one 'on' statement:" +msgstr "在一个 'on' 语句中出现了多于一个的操作符(operator):" + +msgid ". Please specify a single operator." +msgstr "。请指定单个操作符。" + +msgid "'on' contains no column name:" +msgstr "'on' 中没有列名:" + +msgid ". Each 'on' clause must contain one or two column names." +msgstr "。每个'on' 子句必须包含一个或两个列名。" + +msgid "'on' contains more than 2 column names:" +msgstr "'on' 包含了超过两个列名:" + +msgid "Invalid operators" +msgstr "无效的操作符" + +msgid ". Only allowed operators are" +msgstr "。只有这些操作符是有效的" + +msgid "." +msgstr "." + +msgid "There is no package %s in provided repository." +msgstr "所提供的资料库中不含包%s" + +msgid "'fromLast' must be TRUE or FALSE" +msgstr "'fromLast' 必须为 TRUE 或 FALSE" + +msgid "x must be an atomic vector or data.frames/data.tables" +msgstr "x 必须是原子向量或data.frame/data.table" + +msgid "Using '" +msgstr "使用 '" + +msgid "' as value column. Use 'value.var' to override" +msgstr "' 作为 value 列。可使用 'value.var' 修改" + +msgid "The dcast generic in data.table has been passed a" +msgstr "data.table 中的 dcast 泛型函数被传递了" + +msgid ", but data.table::dcast currently only has a method for data.tables. Please confirm your input is a data.table, with setDT(" +msgstr ",但目前 data.table::dcast 仅提供了针对 data.table 的方法。您可通过如下两种方法确保您的输入为一个 data.table对象,即setDT(" + +msgid ") or as.data.table(" +msgstr ") 或 as.data.table(" + +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 ")。若您想使用reshape2::dcast,尝试先安装reshape2。但请注意reshape2已经不推荐使用,您应修改您的代码以不再使用它。" + +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 ",将尝试重定向到reshape2::dcast。请注意reshape2已经不推荐使用,故该重定向目前也不推荐使用。请手动执行该重定向,如reshape2::dcast(" + +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 "无效的公式。所转换的公式的形式应为LHS ~ RHS,如a + b ~ c。" + +msgid "data.table to cast must have unique column names" +msgstr "要转换的data.table必须具有唯一的列名" + +msgid "value.var values [" +msgstr "value.var 的值 [" + +msgid "] are not found in 'data'." +msgstr "] 无法在 'data' 中找到" + +msgid "When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be either of length =1 or =length(fun.aggregate)." +msgstr "当 'fun.aggregate' 和 'value.var' 同为 list时, 'value.var' 的长度必须为 1 或 length(fun.aggregate)。" + +msgid "'data' must be a data.table." +msgstr "'data' 必须为 data.table" + +msgid "'drop' must be logical TRUE/FALSE" +msgstr "'drop' 必须为逻辑 TRUE/FALSE" + +msgid "Column [" +msgstr "列 [" + +msgid "] not found or of unknown type." +msgstr "] 无法找到或其类型未知。" + +msgid "Columns specified in formula can not be of type list" +msgstr "在formula中指定的列不应为列表类型" + +msgid "Can not cast an empty data.table" +msgstr "无法转换一个空的data.table" + +msgid "Aggregate function missing, defaulting to 'length'" +msgstr "聚合函数缺失,将默认采用'length'" + +msgid "Internal error -- empty rhsnames in dcast; please report" +msgstr "内部错误:dcast 中 rhsnames 为空;请报告" + +msgid "The melt generic in data.table has been passed a" +msgstr "data.table 中的 melt 泛型函数被传递了" + +msgid "" +", but data.table::melt currently only has a method for data.tables. Please " +"confirm your input is a data.table, with setDT(" +msgstr "" +",然而 data.table::melt 当前只支持输入 data.table 对象。请确保输入的是一个 " +"data.table 对象,可以用 setDT(" + +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 "" +")。如果确实要使用 reshape2 中的方法,首先要安装这个包。需要注意,reshape2 已" +"经弃用,你应该将代码迁移并且不再使用它。" + +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 "" +"即将转向到 reshape2 中的相关方法;请注意 reshape2 已经弃用,这个转向也已经弃" +"用。如果要在 data.table 和 reshape2 同时附着的情况下继续使用 reshape2 中的 " +"melt 方法,(例如 melt.list),你可以把命名空间写在函数名称前面,例如 " +"reshape2::melt(" + +msgid "Input patterns must be of type character." +msgstr "输入的 patterns 必须是字符类型。" + +msgid "'data' must be a data.table" +msgstr "'data' 必须是一个 data.table" + +msgid "'value.name' provided in both 'measure.vars'" +msgstr "'value.name' 同时出现在了 'measure.vars'" + +msgid "and 'value.name argument'; value provided in" +msgstr "和 'value.name' 参数中;'measure.vars' 中的值" + +msgid "'measure.vars' is given precedence." +msgstr "将被优先使用。" + +msgid "Please provide a name to each element of 'measure.vars'." +msgstr "请为 'measure.vars' 中的每个元素提供一个名称。" + +msgid "" +"y and x must both be data.tables. Use `setDT()` to convert list/data.frames " +"to data.tables by reference or as.data.table() to convert to data.tables by " +"copying." +msgstr "" +"y 和 x 必须都是 data.table 对象。用 `setDT()` 可以把列表/数据框引用转换为 " +"data.table,或者用 as.data.table() 进行复制转换。" + +msgid "maxgap must be a non-negative integer value of length 1" +msgstr "maxgap 必须是一个长度为1的非负整数" + +msgid "minoverlap must be a positive integer value of length 1" +msgstr "minoverlap 必须是一个长度为1的正整数" + +msgid "which must be a logical vector of length 1. Either TRUE/FALSE" +msgstr "which 必须是一个长度为1的逻辑向量(TRUE/FALSE)" + +msgid "nomatch must either be NA or NULL" +msgstr "nomatch 必须是 NA 或 NULL" + +msgid "maxgap and minoverlap arguments are not yet implemented." +msgstr "maxgap 和 minoverlap 参数还未实现。" + +msgid "" +"'y' must be keyed (i.e., sorted, and, marked as sorted). Call setkey(y, ...) " +"first, see ?setkey. Also check the examples in ?foverlaps." +msgstr "" +"'y' 必须有主键(已经排序并且标记为已排序)。请先用 setkey(y, ...) 设置主键," +"可以参考 ?setkey 以及 ?foverlaps 中提供的例子。" + +msgid "" +"'by.x' and 'by.y' should contain at least two column names (or numbers) each " +"- corresponding to 'start' and 'end' points of intervals. Please see ?" +"foverlaps and examples for more info." +msgstr "" +"'by.x' 和 'by.y' 每个应当包含至少两个列名(或序号),分别对应区间的起始点 " +"'start' 和 结束点 'end'。请参考 ?foverlaps 以及提供的例子。" + +msgid "" +"Invalid numeric value for 'by.x'; it should be a vector with values 1 <= by." +"x <= length(x)" +msgstr "" +"无效的 'by.x' 数值,应该是一个向量,其中的值满足 1 <= by.x <= length(x)" + +msgid "" +"Invalid numeric value for 'by.y'; it should be a vector with values 1 <= by." +"y <= length(y)" +msgstr "无效的 'by.y' 数值,应当满足 1 <= by.y <= length(y)" + +msgid "A non-empty vector of column names or numbers is required for by.x" +msgstr "'by.x' 必须是一个非空向量,包含列名或者序号" + +msgid "A non-empty vector of column names or numbers is required for by.y" +msgstr "'by.y'应该是具有列名或者数字非空向量" + +msgid "The first" +msgstr "首先" + +msgid "columns of y's key must be identical to the columns specified in by.y." +msgstr "在'by.y'中,y键的列必须与指定的列相同" + +msgid "Elements listed in 'by.x' must be valid names in data.table 'x'" +msgstr "对于data.table中的'X','by.x'中的元素必须是有效名称" + +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 "当by.x的长度不等于by.y时。by.x中指定的列应该与by.y中指定的列等长。" + +msgid "y has some duplicated column name(s):" +msgstr "y有重复的列名时:" + +msgid "" +"The last two columns in by.x should correspond to the 'start' and 'end' " +"intervals in data.table 'x' and must be integer/numeric type." +msgstr "" +"'by.x'的最后两列应该与data.table 'x'中的'开始'与'结尾'的间隔对应且必须是整数/" +"数字类型" + +msgid "NA values in data.table 'x' start column: '" +msgstr "在data.table的X的初始列的NA值时:'" + +msgid "" +"'. All rows with NA values in the range columns must be removed for " +"foverlaps() to work." +msgstr "'。必须删除范围列内的具有NA值的行,以(保证)foverlaps()起作用。" + +msgid "NA values in data.table 'x' end column: '" +msgstr "在data.table的'X'的末尾列中NA值时:" + +msgid "All entries in column" +msgstr "列中所有条目" + +msgid "should be <= corresponding entries in column" +msgstr "应该<=列中相应的条目" + +msgid "in data.table 'x'." +msgstr "在data.table的'X'部分" + +msgid "" +"The last two columns in by.y should correspond to the 'start' and 'end' " +"intervals in data.table 'y' and must be integer/numeric type." +msgstr "" +"'by.y'的最后两列应该与data.table 'y'中的'开始'与'结尾'的间隔对应且必须是整数/" +"数字类型" + +msgid "NA values in data.table 'y' start column: '" +msgstr "NA值在data.table的'y'起始列时:" + +msgid "NA values in data.table 'y' end column: '" +msgstr "NA值在data.table的'y'尾列时:" + +msgid "in data.table 'y'." +msgstr "在data.table的'y'部分" + +msgid "" +"Some interval cols are of type POSIXct while others are not. Please ensure " +"all interval cols are (or are not) of POSIXct type" +msgstr "" +"一些间隔列的类型是POSIXct而有些不是。(因此)请确保所有间隔列都是或都不是" +"POSIXct类型" + +msgid "" +"POSIXct interval cols have mixed timezones. Overlaps are performed on the " +"internal numerical representation of POSIXct objects (always in UTC epoch " +"time), therefore printed values may give the impression that values don't " +"overlap but their internal representations do Please ensure that POSIXct " +"type interval cols have identical 'tzone' attributes to avoid confusion." +msgstr "" +"POSIXct间隔列有混合的时区。POSIXct对象(始终以UTC纪元时间为准)以内部数字表现" +"形式展现为重叠,因此显示的值可能(使用户)留下'值是不会重叠,但其内部表现显示" +"显示却重叠'的印象,(所以)请确保POSIXct类型的间隔列具有相同的'时区'属性以避" +"免混乱。" + +msgid "Not yet implemented" +msgstr "尚未实现" + +msgid "maxgap > minoverlap. maxgap will have no effect here." +msgstr "最大空隙大于最小重叠,此处的最大空隙无效。" + +msgid "length(na.last) = 0" +msgstr "na.last长度等于0" + +msgid "length(na.last) > 1, only the first element will be used" +msgstr "当na.last长度大于1时,只会使用第一个元素" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense" +msgstr "x是单个向量,非空的'cols'没有意义" + +msgid "x is a list, 'cols' can not be 0-length" +msgstr "x是一个list, 'cols'不能为0长度" + +msgid "Used more than one of the arguments input=, file=, text= and cmd=." +msgstr "使用了超过一个参数, 包括input=, file=, text= 和 cmd=." + +msgid "Argument 'encoding' must be 'unknown', 'UTF-8' or 'Latin-1'." +msgstr "参数 'encoding' 必须为 'unknown', 'UTF-8' 或 'Latin-1'." + +msgid "'text=' is type" +msgstr "'text=' 是类型" + +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 "" +"input= 必须是以下其中一种字符串: 一个文件名, 一个含有不少于一个空格的系统命" +"令, 以'http[s]://','ftp[s]://' 或 'file://' 开头的URL, 或是本身就包含至少一个" +"\\n 或 \\r的输入数据" + +msgid "" +"input= contains no \\n or \\r, but starts with a space. Please remove the " +"leading space, or use text=, file= or cmd=" +msgstr "" +"input= 不包含 \\n 或 \\r, 但是开头有个空格请移除开头的空格, 或使用text=, " +"file= 或 cmd=" + +msgid "" +"Input URL requires https:// connection for which fread() requires 'curl' " +"package which cannot be found. Please install 'curl' using 'install." +"packages('curl')'." +msgstr "" +"输入的URL要求 https:// 连接. 因而 fread() 要求 'curl' 包.请用 'install." +"packages('curl')' 安装'curl'包." + +msgid "Taking input= as a system command ('" +msgstr "正将 input= 当做系统命令 ('" + +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 "" +"') 同时一个变量也被传输到 `input=`.请使用fread(cmd=...).这是出于安全考虑. 试" +"想你在开发一个app, 这个app可能有恶意用户, 同时这个app的运行环境不安全 (比如在" +"root环境下运行).请阅读v1.11.6版本的NEWS file里面的item 5获取更多资讯, 或了解" +"如何取消这个提示." + +msgid "File '" +msgstr "文件'" + +msgid "' does not exist or is non-readable. getwd()=='" +msgstr "' 不存在, 或不可读. getwd()=='" + +msgid "' is a directory. Not yet implemented." +msgstr "'是个目录。还没有编程实现。" + +msgid "' has size 0. Returning a NULL" +msgstr "' 的大小为0. 返回一个NULL" + +msgid "data.table" +msgstr "data.table" + +msgid "data.frame" +msgstr "data.frame" + +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 "" +"想要直接读取 gz 和 bz2 文件, fread() 需要 'R.utils' 包.请用 'install." +"packages('R.utils')'安装 'R.utils' 包." + +msgid "" +"'autostart' is now deprecated and ignored. Consider skip='string' or skip=n" +msgstr "" +"'autostart' 现在已经不再推荐使用且失效, 请考虑用 skip='string' 或 skip=n" + +msgid "" +"colClasses is type 'logical' which is ok if all NA but it has some TRUE or " +"FALSE values in it which is not allowed. Please consider the drop= or " +"select= argument instead. See ?fread." +msgstr "" +"colClasses 只能在全部是NA的情况下为逻辑变量. 请考虑使用 drop= 或 select= . 更" +"多信息请参照 ?fread" + +msgid "colClasses is not type list or character vector" +msgstr "colClasses 不是列表 (list) 或字符向量 (character vector)" + +msgid "" +"colClasses=\"NULL\" (quoted) is interpreted as colClasses=NULL (the default) " +"as opposed to dropping every column." +msgstr "" +"colClasses=\"NULL\" (带引号) 应该被视为 colClasses=NULL (默认情况)而不是弃掉" +"每个列" + +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 "" +"na.strings 中包含 strip.white==TRUE (默认情况) 和 \"\", 因此(字符类型的)列中" +"的空格会被当作 ." + +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 "" +"因为 strip.white=TRUE (默认情况), 请使用 na.strings=\"\" 以使得(字符类型的)列" +"中的空格会被当作 ." + +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 "" +"但是 strip.white=FALSE. 请使用 strip.white=TRUE (默认情况), 同时na.strings=" +"\"\", 以使得(字符类型的)列中的空格转成 ." + +msgid "" +"'data.table' relies on the package 'yaml' to parse the file header; please " +"add this to your library with install.packages('yaml') and try again." +msgstr "" +"'data.table' 依赖 'yaml' 包来分析文件头 (header)请使用 install." +"packages('yaml') 来安装然后再重试." + +msgid "" +"Combining a search string as 'skip' and reading a YAML header may not work " +"as expected -- currently," +msgstr "" +"读取一个 YAML 文件头 (header) 的同时以 'skip' 为搜索字符可能会引起异常 -- 目" +"前" + +msgid "" +"reading will proceed to search for 'skip' from the beginning of the file, " +"NOT from the end of" +msgstr "读取会直接从文件的开头搜索 'skip', 而非从元数据 (metadata) " + +msgid "" +"the metadata; please file an issue on GitHub if you'd like to see more " +"intuitive behavior supported." +msgstr "的尾部开始; 如果你希望更直观的功能, 请在 Github 上提交 issue." + +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 "), 它不含符合要求的 YAML header." + +msgid "(expecting something matching regex \"" +msgstr "需要符合正则 (regex) \"" + +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 "" +"到了文件的结尾, 还没发现 YAML header 的完结.一个有效的 YAML header 应该根据行" +"匹配结尾." + +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()的index参数必须是字符向量命名的列(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 "'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already" +msgstr "'xts'类对象传递给了%s方程,但是'xts'包不可用。您应首先安装'xts'包" + +msgid "Argument 'sort' should be logical TRUE/FALSE" +msgstr "参数 'sort' 应为逻辑值 TRUE 或 FALSE" + +msgid "Argument 'no.dups' should be logical TRUE/FALSE" +msgstr "参数 'no.dups' 应为逻辑值 TRUE 或 FALSE" + +msgid "You are trying to join data.tables where" +msgstr "你正在试图去联结data.table,其中" + +msgid "'x' and 'y' arguments are" +msgstr "参数'x'和'y'是" + +msgid "'x' argument is" +msgstr "参数'x'的值为" + +msgid "'y' argument is" +msgstr "参数'y'的值为" + +msgid "0 columns data.table." +msgstr "0列的data.table对象。" + +msgid "`by.x` and `by.y` must be of same length." +msgstr "`by.x`和`by.y`必须是相同的长度。" + +msgid "Supplied both `by` and `by.x/by.y`. `by` argument will be ignored." +msgstr "参数`by`和`by.x/by.y`都提供了值。参数`by`的值会被忽略。" + +msgid "A non-empty vector of column names are required for `by.x` and `by.y`." +msgstr "`by.x`和`by.y`必须是非空的列名。" + +msgid "Elements listed in `by.x` must be valid column names in x." +msgstr "`by.x`中的列名必须是x的有效列。" + +msgid "Elements listed in `by.y` must be valid column names in y." +msgstr "`by.y`中的列名必须是y的有效列。" + +msgid "A non-empty vector of column names for `by` is required." +msgstr "`by`必须是非空的列名。" + +msgid "Elements listed in `by` must be valid column names in x and y" +msgstr "`by`中的列名必须是x和y的有效列" + +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 "线程(请参阅?getDTthreads)。最新的消息:r-datatable.com" + +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 "" +"用英语运行data.table。软件包只提供英语支持。当在在线搜索帮助时,也要确保检查" +"英语错误信息。这个可以通过查看软件包源文件中的po/R-.po和po/." +"po文件获得,这个文件可以并排找到母语和英语错误信息。" + +msgid "" +"**********\n" +"This development version of data.table was built more than 4 weeks ago. " +"Please update: data.table::update.dev.pkg()\n" +"**********" +msgstr "" +"**********这个data.table的开发版本是在4个多星期之前构建的。请更新版本:data." +"table::update.dev.pkg()\n" +"**********" + +msgid "" +"**********\n" +"This installation of data.table has not detected OpenMP support. It should " +"still work but in single-threaded mode." +msgstr "" +"**********\n" +"data.table的安装未检测到OpenMP支持。在单线程模式下应该仍能运行" + +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 "" +"如果是Mac,请确保您使用的R版本>=3.4.0,同时遵循了我们Mac上的安装说明:" +"https://github.com/Rdatatable/data.table/wiki/Installation。" + +msgid "" +"This warning message should not occur on Windows or Linux. If it does, " +"please file a GitHub issue.\n" +"**********" +msgstr "" +"在Windows或Linux上不应出现此警告消息。如果有,请提交给GitHub issue。\n" +"**********" + +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 "" +"这个选项'datatable.nomatch'正在被使用,没有被设置为默认值NA。该选项目前仍被使" +"用,但在未来不会被使用。相关的详细信息和动机,请参阅1.12.4的信息。要指定内部" +"连接,请在调用中明确指定`nomatch = NULL`,而不要使用此选项更改默认值。" + +msgid "The datatable." +msgstr "datatable" + +msgid "version (" +msgstr "版本(" + +msgid ") does not match the package (" +msgstr ")和包不匹配 (" + +msgid "). Please close all R sessions to release the old" +msgstr ").请关闭所有R会话以释放旧版本" + +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 "" +"并在全新的R会话中重新安装data.table。根本原因是R包安装程序可能在某些未经确认" +"的条件下将包置于显然可以正常工作的状态,但是新的R代码正在默默地调用旧的C代" +"码:https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478。一旦安装包处于" +"这不匹配的状态下,在您下次升级程序包之前,它可能会默默地产生错误的结果请提交" +"具体的情况至17478协助我们确认这个Bug。R和C代码之间的这种不匹配可能发生在任何" +"包中,而不仅仅是在data.table中。只是data.table添加了这个检查" + +msgid "This is R" +msgstr "这是R" + +msgid "but data.table has been installed using R" +msgstr "但是data.table安装在R" + +msgid ". The major version must match. Please reinstall data.table." +msgstr "。主要的版本必须匹配。 请重新安装data.table" + +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 "" +"选项'datatable.old.bywithoutby'已经被移除,警告了2年。它现在被忽略。 请改用" +"by = .EACHI,然后停止使用这个选项。" + +msgid "Unexpected base R behaviour: list(x) has copied x" +msgstr "意外的base R行为:list(x)已经复制了x" + +msgid "Unexpected base R behaviour: names<- has copied column contents" +msgstr "意外的base R行为:names<- 已复制列内容" + +msgid "" +"Unexpected base R behaviour: DF[2,2]<- did not copy column 2 which was " +"assigned to" +msgstr "意外的base R行为:DF[2,2]<- 没有复制第二列它被分配给" + +msgid "" +"Unexpected base R behaviour: DF[2,2]<- copied the first column which was not " +"assigned to, too" +msgstr "意外的base R行为:DF[2,2]<-复制了第一列的内容,它也没有被分配给" + +msgid "Unexpected base R behaviour: DF[2,2]<- has not copied address(DF)" +msgstr "意外的base R行为:DF[2,2]<- 还没有复制address(DF)" + +msgid "" +"Reminder to data.table developers: don't use getRversion() internally. Add a " +"behaviour test to .onLoad instead." +msgstr "" +"提醒data.table开发人员:请勿在内部使用getRversion()。将行为测试添加到.onLoad" + +msgid "Provide either threads= or percent= but not both" +msgstr "提供threads=或percent=,但不能两者都提供" + +msgid "percent= is provided but is length" +msgstr "提供了percent =,但为长度" + +msgid "percent==" +msgstr "percent==" + +msgid "but should be a number between 2 and 100" +msgstr "但应为2到100之间的数字" + +msgid "Valid options for col.names are 'auto', 'top', and 'none'" +msgstr "对col.names有效的参数为'auto', 'top', and 'none'" + +msgid "Column classes will be suppressed when col.names is 'none'" +msgstr "当col.names为'none'时,列的类型将被抑制" + +msgid "" +"Internal structure doesn't seem to be a list. Possibly corrupt data.table." +msgstr "内部类型可能不是一个列表,该操作可能会损坏data.table" + +msgid "" +"x may no longer be the character name of the data.table. The possibility was " +"undocumented and has been removed." +msgstr "x可能不再是data.table的名字。 该变化不被记录并且已经被删除" + +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 "" +"key(x)<-value 已经废弃,不再支持。请使用setkey(), 也许您需要配套使用copy()自" +"2012年来就警告将弃用原用法,将来该用法将报错" + +msgid "x is not a data.table" +msgstr "x不是一个data.table" + +msgid "" +"cols is not a character vector. Please see further information in ?setkey." +msgstr "列不是一个字符类型的向量. 更多信息请查看?setkey." + +msgid "" +"Setting a physical key on .SD is reserved for possible future use; to modify " +"the original data's order by group. Try setindex() instead. Or, set*(copy(." +"SD)) as a (slow) last resort." +msgstr "" +"在.SD设置一个物理的键的功能被保留,以备未来的需求; 如需通过分组修改原数据顺序" +"请使用setindex(), 或者set*(copy(.SD))作为最终(该方式缓慢)的方法" + +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 "" +"列为一个长度为0的字符串向量,请删除键值并使用NULL, 或者使用suppressWarnings()" +"来避免警告" + +msgid "cols is the empty string. Use NULL to remove the key." +msgstr "列为一个空字符串,请使用NULL以删除键值。" + +msgid "cols contains some blanks." +msgstr "列中包含空白" + +msgid "some columns are not in the data.table:" +msgstr "一些列不在data.table中" + +msgid "" +"x contains a column called '.xi'. Conflicts with internal use by data.table." +msgstr "x包含一个叫做'.xi'的列。这与data.table中使用的内部名称冲突" + +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 "内部错误: 目前在setkey中,'cols'应该是字符类型, 请报告" + +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 "" +"请使用'if (length(o <- forderv(DT,by))) ...' , 以便在一步中拥有较好的效率,同" +"时如果你还未排序,你也获得了变量o" + +msgid "x is vector but 'by' is supplied" +msgstr "x是一个向量, 但是参数'by'被提供" + +msgid "x is a single vector, non-NULL 'by' doesn't make sense" +msgstr "x是一个单向量,非NULL的'by'参数不合理" + +msgid "Attempting to order a 0-column data.table or data.frame." +msgstr "你正在试图对一个0列的data.table或者data.frame排序" + +msgid "" +"The first item passed to [f]order is a plain list but there are more items. " +"It should be a data.table or data.frame." +msgstr "" +"传递给[f]order的第一个变量是一个简单的列表, 但此处有更多的项它需要是一个data." +"table或者data.frame" + +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 "目前新的并行排序方法尚无法在decreasing=TRUE的条件下使用。将使用单线程进行计算。" + +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 "x 必须为 data.frame 或 data.table" + +msgid "na.last must be logical TRUE/FALSE" +msgstr "na.last 必须为逻辑 TRUE/FALSE" + +msgid "cols is not a character vector. Please see further information in ?setorder." +msgstr "cols并非一个字符向量。请参考 ?setorder以获得更多信息。" + +msgid "cols is a character vector of zero length. Use NULL instead, or wrap with suppressWarnings() to avoid this warning." +msgstr "cols为一长度为零的字符向量。请使用NULL代替,或将本函数使用suppressWarnings()包裹以阻止该警告。" + +msgid "' which is not supported for ordering currently." +msgstr "',该类型目前尚不支持排序。" + +msgid "'sorted' is TRUE but element" +msgstr "'sorted' 为 TRUE 但元素" + +msgid "is non-atomic, which can't be sorted; try setting sorted = FALSE" +msgstr "并非原子类型,无法排序。请尝试使用 sorted=FALSE" + +msgid "Cross product of elements provided to CJ() would result in %d rows which exceeds .Machine$integer.max == %d" +msgstr "CJ()中元素的叉积将产生 %d 行,已超过 .Machine$integer.max == %d" + +msgid "x and y must both be data.tables" +msgstr "x 和 y 均需为 data.table" + +msgid "length(by.x) != length(by.y)" +msgstr "length(by.x) != length(by.y)" + +msgid "When x's column ('" +msgstr "当 x 的列 ('" + +msgid "') is character, the corresponding column in y ('" +msgstr "') 是字符,y 中相应的列 ('" + +msgid "') should be factor or character, but found incompatible type '" +msgstr "') 应该是因子或字符,然而此类型并不兼容:'" + +msgid "') is factor, the corresponding column in y ('" +msgstr "') 是因子,y 中相应的列 ('" + +msgid "') should be character or factor, but found incompatible type '" +msgstr "') 应该是字符或因子,然而此类型并不兼容:'" + +msgid "') is integer or numeric, the corresponding column in y ('" +msgstr "') 是整数或数值,y 中相应的列 ('" + +msgid "') can not be character or logical types, but found incompatible type '" +msgstr "') 不能是字符或逻辑类型,然而此类型不兼容:'" + +msgid "argument 'all' should be logical of length one" +msgstr "参数 'all' 应该是长度为 1 的逻辑型" + +msgid "x and y must have the same column names" +msgstr "x 和 y 的列名必须相同" + +msgid "x and y must have the same column order" +msgstr "x 和 y 的列顺序必须保持一致" + +msgid "unsupported column type" +msgstr "不支持的列类型" + +msgid "found in x or y:" +msgstr "存在于 x 或 y 中" + +msgid "of x is '" +msgstr "对于 x ,是 '" + +msgid "' but the corresponding item of y is '" +msgstr "' 然而 y 中对应的项是:'" + +msgid "None of the datasets should contain a column named '.seqn'" +msgstr "所有的数据集都不应该包含名为 '.seqn' 的列" + +msgid "'target' and 'current' must both be data.tables" +msgstr "'target' 和 'current' 都必须是 data.table" + +msgid "Internal error: ncol(current)==ncol(target) was checked above" +msgstr "内部错误:ncol(current)==ncol(target) 之前已经检查" + +msgid "None of the datasets to compare should contain a column named '.seqn'" +msgstr "所有参与比较的数据集都不应该包含名为 '.seqn' 的列" + +msgid "" +"Datasets to compare with 'ignore.row.order' must not have unsupported column " +"types:" +msgstr "与 'ignore.row.order' 进行比较的数据集,不能存在不支持的列类型:" + +msgid "" +"Argument 'tolerance' was forced to lowest accepted value `sqrt(.Machine" +"$double.eps)` from provided" +msgstr "" +"参数 'tolerance' 被强制设定为最低接受值 `sqrt(.Machine$double.eps)`,此值来自" +"于:" + +msgid "" +"Duplicate rows in datasets, numeric columns and ignore.row.order cannot be " +"used with non 0 tolerance argument" +msgstr "" +"数据集中的重复行、数字列和 ignore.row.order 都不能与非 0 的容差(tolerance)" +"参数同时使用" + +msgid "" +"Factor columns and ignore.row.order cannot be used with non 0 tolerance " +"argument" +msgstr "因子列和 ignore.row.order 都不能与非 0 的容差(tolerance)参数同时使用" + +msgid "Internal error: factor type mismatch should have been caught earlier" +msgstr "内部错误:此时不匹配的因子类型应已被发现" + +msgid "argument 'fill' ignored, only make sense for type='const'" +msgstr "参数 'fill' 将被忽略,因其仅当 type='const'时有意义" + +msgid "order.col='" +msgstr "order.col='" + +msgid "' not a column name of info" +msgstr "' 并非info的一个列名" + +msgid "data.table package is loaded. Unload or start a fresh R session." +msgstr "data.table 包已被加载。请将其卸载或启动一个新的 R 会话。" + +msgid "" +"script must end with '.Rraw'. If a file ending '.Rraw.bz2' exists, that will " +"be found and used." +msgstr "" +"脚本文件名必须以 '.Rraw' 结尾。如果以 'Rraw.bz2' 结尾的文件存在,其也将被使" +"用。" + +msgid "Neither %s nor %s exist in %s" +msgstr "%3$s 中 %1$s 也 %2$s 不存在" + +msgid "Failed after test" +msgstr "错误出现于测试" + +msgid "before the next test() call in" +msgstr "后,先于下一调用test()于" + +msgid "out of" +msgstr "总数为" + +msgid ". Search" +msgstr ". 搜索" + +msgid "for test number" +msgstr "以获得测试编号" + +msgid "Timings count mismatch:" +msgstr "计时不一致:" + +msgid "vs" +msgstr "vs" + +msgid "Test" +msgstr "测试" + +msgid "" +"is invalid: when error= is provided it does not make sense to pass y as well" +msgstr "无效:当使用了error=,不应再输入y" + +msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" +msgstr "使用started.at=proc.time()而非Sys.time() (返回POSIXt类型,处理较慢)" + +msgid "make.names='" +msgstr "make.names='" + +msgid "' not found in names of input" +msgstr "'不存在于输入的名字里" + +msgid "make.names=" +msgstr "make.names=" + +msgid "is out of range [1,ncol=" +msgstr "不在以下区间[1,ncol=" + +msgid "'names' must be TRUE/FALSE or a character vector." +msgstr "'names'必须为TRUE/FALSE,或一个字符(character)向量。" + +msgid "'keep' should contain integer values between" +msgstr "'keep'所含整数值应在区间" + +msgid "length(names) (=" +msgstr "length(names) (=" + +msgid ") is not equal to length(" +msgstr ") 并不等于(=" + +msgid ") (=" +msgstr ") (=" + +msgid ")." +msgstr ")." + +msgid "l not type list" +msgstr "l并非列表(list)类型" + +msgid "Argument 'nan' must be length 1" +msgstr "参数 'nan' 的长度必须为 1" + +msgid "Argument 'nan' must be NA or NaN" +msgstr "参数 'nan' 必须为 NA 或 NaN" + +msgid "x not boolean" +msgstr "x并非布尔值" + +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 "" +"有些列的类型是64 位整数类型('integer64')但bit64包并没有安装。这些列会被显示" +"成看起来有些奇怪的浮点型数据。然而并不需要重新载入这些数据,只需运行 install." +"packages('bit64') 来获取显示integer64类型的打印方法,再重新打印该数据即可。" + +msgid "Pattern" +msgstr "Pattern" + +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 "" +"输入的xts对象不能含有'index'列,因这会导致出现重复的列名。请尝试重新命名xts中" +"的'index'列或者使用`keep.rownames=FALSE`并手动添加index为另外的列" + +msgid "" +"data.table must have a time based column in first position, use " +"`setcolorder` function to change the order, or see ?timeBased for supported " +"types" +msgstr "" +"data.table的首列必须为一个以时间为基础的列,请使用`setcolorder`方程来改变它的" +"顺序,或者通过?timeBased来查看支持的类型" + +msgid "Following columns are not numeric and will be omitted:" +msgstr "以下的列并非数值类型,将被忽略:" + +msgid "%d variable not shown: %s\n" +msgid_plural "%d variables not shown: %s\n" +msgstr[0] "%d变量没显示: %s\n" diff --git a/po/data.table.pot b/po/data.table.pot new file mode 100644 index 0000000000..a826bab881 --- /dev/null +++ b/po/data.table.pot @@ -0,0 +1,4391 @@ +# 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.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-30 01:24+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:7 +msgid "Internal error: finalizer hasn't received an ExternalPtr" +msgstr "" + +#: assign.c:9 +msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +msgstr "" + +#: assign.c:12 +#, c-format +msgid "Internal error: finalizer sees l=%d, tl=%d" +msgstr "" + +#: assign.c:121 +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:124 +msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" +msgstr "" + +#: assign.c:126 +msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" +msgstr "" + +#: assign.c:168 +msgid "Internal error: length(names)>0 but =0 and not NA." +msgstr "" + +#: assign.c:239 fsort.c:109 +msgid "verbose must be TRUE or FALSE" +msgstr "" + +#: assign.c:287 +msgid "assign has been passed a NULL dt" +msgstr "" + +#: assign.c:288 +msgid "dt passed to assign isn't type VECSXP" +msgstr "" + +#: assign.c:290 +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:298 +msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" +msgstr "" + +#: assign.c:302 +msgid "dt passed to assign has no names" +msgstr "" + +#: assign.c:304 +#, c-format +msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" +msgstr "" + +#: assign.c:306 +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:315 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "" + +#: assign.c:320 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:323 +#, 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:329 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]." +msgstr "" + +#: assign.c:332 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "" + +#: assign.c:340 +#, c-format +msgid "Added %d new column%s initialized with all-NA\n" +msgstr "" + +#: assign.c:345 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "" + +#: assign.c:359 +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:370 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:373 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" + +#: assign.c:375 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "" + +#: assign.c:376 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "" + +#: assign.c:378 +#, c-format +msgid "RHS_list_of_columns == %s\n" +msgstr "" + +#: assign.c:383 +#, 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:388 +#, 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:393 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" +msgstr "" + +#: assign.c:395 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "" + +#: assign.c:403 +#, 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:404 +#, 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:409 +msgid "When deleting columns, i should not be provided" +msgstr "" + +#: assign.c:415 +#, 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:420 +#, c-format +msgid "" +"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" +msgstr "" + +#: assign.c:422 +#, c-format +msgid "Column '%s' does not exist to remove" +msgstr "" + +#: assign.c:428 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "" + +#: assign.c:432 +#, 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:437 +#, 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:447 +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:448 +#, c-format +msgid "" +"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +"issue tracker, including result of sessionInfo()." +msgstr "" + +#: assign.c:450 +#, 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:452 +#, 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:454 +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:458 +#, c-format +msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" +msgstr "" + +#: assign.c:469 +msgid "" +"Internal error: earlier error 'When deleting columns, i should not be " +"provided' did not happen." +msgstr "" + +#: assign.c:480 +#, 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:485 +#, c-format +msgid "Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n" +msgstr "" + +#: assign.c:554 +#, 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:562 +msgid "Internal error: index name ends with trailing __" +msgstr "" + +#: assign.c:567 +msgid "Internal error: Couldn't allocate memory for s4." +msgstr "" + +#: assign.c:578 +msgid "Internal error: Couldn't allocate memory for s5." +msgstr "" + +#: assign.c:599 assign.c:615 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:608 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:680 +#, c-format +msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" +msgstr "" + +#: assign.c:684 +msgid "Internal error: memrecycle has received NULL colname" +msgstr "" + +#: assign.c:710 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" + +#: assign.c:724 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "" + +#: assign.c:732 +#, 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:738 +#, 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:759 +msgid "" +"Internal error: levels of target are either not unique or have truelength<0" +msgstr "" + +#: assign.c:798 +#, c-format +msgid "Unable to allocate working memory of %d bytes to combine factor levels" +msgstr "" + +#: assign.c:805 +msgid "Internal error: extra level check sum failed" +msgstr "" + +#: assign.c:824 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of the target column " +"(column %d named '%s')." +msgstr "" + +#: assign.c:830 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " +"column (column %d named '%s')." +msgstr "" + +#: assign.c:835 +#, c-format +msgid "" +"Coercing 'list' RHS to '%s' to match the type of the target column (column " +"%d named '%s')." +msgstr "" + +#: assign.c:841 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" +msgstr "" + +#: assign.c:936 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "" + +#: assign.c:1056 +msgid "" +"To assign integer64 to a character column, please use as.character() for " +"clarity." +msgstr "" + +#: assign.c:1068 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "" + +#: assign.c:1115 +#, c-format +msgid "Internal error: writeNA passed a vector of type '%s'" +msgstr "" + +#: assign.c:1146 +#, c-format +msgid "" +"Internal error: savetl_init checks failed (%d %d %p %p). please report to " +"data.table issue tracker." +msgstr "" + +#: assign.c:1154 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "" + +#: assign.c:1163 +#, c-format +msgid "" +"Internal error: reached maximum %d items for savetl. Please report to data." +"table issue tracker." +msgstr "" + +#: assign.c:1170 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "" + +#: assign.c:1176 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "" + +#: assign.c:1199 +msgid "x must be a character vector" +msgstr "" + +#: assign.c:1200 +msgid "'which' must be an integer vector" +msgstr "" + +#: assign.c:1201 +msgid "'new' must be a character vector" +msgstr "" + +#: assign.c:1202 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "" + +#: assign.c:1205 +#, c-format +msgid "" +"Item %d of 'which' is %d which is outside range of the length %d character " +"vector" +msgstr "" + +#: assign.c:1215 +msgid "dt passed to setcolorder has no names" +msgstr "" + +#: assign.c:1217 +#, c-format +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "" + +#: assign.c:1224 +msgid "" +"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" +msgstr "" + +#: assign.c:1226 +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 (%) is greater than item %d of upper (%)" +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:44 +#, c-format +msgid "" +"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " +"issue on the data.table tracker." +msgstr "" + +#: chmatch.c:73 +#, c-format +msgid "" +"Failed to allocate % 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:290 +msgid "" +"RHS of := is NULL during grouped assignment, but it's not possible to delete " +"parts of a column." +msgstr "" + +#: dogroups.c:294 +#, 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:305 +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:320 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "" + +#: dogroups.c:327 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "" + +#: dogroups.c:361 +#, 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:364 +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:366 +#, 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:374 +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:386 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "" + +#: dogroups.c:387 +#, c-format +msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +msgstr "" + +#: dogroups.c:420 +#, 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:427 +#, 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:429 +#, 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:444 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "" + +#: dogroups.c:454 +#, c-format +msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" +msgstr "" + +#: dogroups.c:456 +#, c-format +msgid "" +"\n" +" %s took %.3fs for %d groups\n" +msgstr "" + +#: dogroups.c:458 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr "" + +#: dogroups.c:482 +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 % but must be 1 or length of 'test' (%)." +msgstr "" + +#: fifelse.c:40 +#, c-format +msgid "" +"Length of 'no' is % but must be 1 or length of 'test' (%)." +msgstr "" + +#: fifelse.c:51 +#, c-format +msgid "Length of 'na' is % 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 +#, c-format +msgid "" +"Internal error in concat: 'idx' must take values between 0 and length(vec); " +"0 <= idx <= %d" +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:683 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "" + +#: fmelt.c:688 +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]==%20\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:1269 +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:1301 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "" + +#: forder.c:1310 +msgid "x must be either NULL or an integer vector" +msgstr "" + +#: forder.c:1312 +msgid "nrow must be integer vector length 1" +msgstr "" + +#: forder.c:1314 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "" + +#: forder.c:1331 +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:104 +#, c-format +msgid "" +"Internal error in line %d of fread.c, please report on data.table GitHub: " +msgstr "" + +#: fread.c:147 +#, c-format +msgid "System error %d unmapping view of file\n" +msgstr "" + +#: fread.c:150 +#, c-format +msgid "System errno %d unmapping file: %s\n" +msgstr "" + +#: fread.c:210 +#, c-format +msgid "Internal error: NUMTYPE(%d) > nLetters(%d)" +msgstr "" + +#: fread.c:435 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM. %s allocation." +msgstr "" + +#: fread.c:440 +#, c-format +msgid "Avoidable %.3f seconds. %s time to copy.\n" +msgstr "" + +#: fread.c:441 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr "" + +#: fread.c:1093 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "" + +#: fread.c:1096 +msgid "[01] Check arguments\n" +msgstr "" + +#: fread.c:1103 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr "" + +#: fread.c:1111 +msgid "" +"Internal error: NAstrings is itself NULL. When empty it should be pointer to " +"NULL." +msgstr "" + +#: fread.c:1129 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "" + +#: fread.c:1134 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "" + +#: fread.c:1144 +msgid " No NAstrings provided.\n" +msgstr "" + +#: fread.c:1146 +msgid " NAstrings = [" +msgstr "" + +#: fread.c:1149 +msgid "]\n" +msgstr "" + +#: fread.c:1151 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr "" + +#: fread.c:1153 +msgid " None of the NAstrings look like numbers.\n" +msgstr "" + +#: fread.c:1155 +#, c-format +msgid " skip num lines = %\n" +msgstr "" + +#: fread.c:1156 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr "" + +#: fread.c:1157 +#, c-format +msgid " show progress = %d\n" +msgstr "" + +#: fread.c:1158 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr "" + +#: fread.c:1166 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "" + +#: fread.c:1167 +msgid "dec='' not allowed. Should be '.' or ','" +msgstr "" + +#: fread.c:1168 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1169 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1186 +msgid "[02] Opening the file\n" +msgstr "" + +#: fread.c:1189 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "" + +#: fread.c:1193 +msgid "Internal error: last byte of character input isn't \\0" +msgstr "" + +#: fread.c:1196 +#, c-format +msgid " Opening file %s\n" +msgstr "" + +#: fread.c:1200 +#, c-format +msgid "file not found: %s" +msgstr "" + +#: fread.c:1204 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "" + +#: fread.c:1207 fread.c:1235 +#, c-format +msgid "File is empty: %s" +msgstr "" + +#: fread.c:1208 fread.c:1236 +#, c-format +msgid " File opened, size = %s.\n" +msgstr "" + +#: fread.c:1225 +#, c-format +msgid "File not found: %s" +msgstr "" + +#: fread.c:1231 +#, c-format +msgid "Unable to open file after %d attempts (error %d): %s" +msgstr "" + +#: fread.c:1233 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "" + +#: fread.c:1238 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %d for file %s" +msgstr "" + +#: fread.c:1245 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "" + +#: fread.c:1246 +msgid "Please upgrade to 64bit" +msgstr "" + +#: fread.c:1246 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "" + +#: fread.c:1249 +msgid " Memory mapped ok\n" +msgstr "" + +#: fread.c:1251 +msgid "" +"Internal error: Neither `input` nor `filename` are given, nothing to read." +msgstr "" + +#: fread.c:1268 +msgid "[03] Detect and skip BOM\n" +msgstr "" + +#: fread.c:1272 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "" + +#: fread.c:1277 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "" + +#: fread.c:1280 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "" + +#: fread.c:1285 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr "" + +#: fread.c:1288 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "" + +#: fread.c:1295 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "" + +#: fread.c:1302 +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:1303 +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:1327 +#, 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:1333 +msgid "" +"This file is very unusual: it ends abruptly without a final newline, and " +"also its size is a multiple of 4096 bytes. Please properly end the last row " +"with a newline using for example 'echo >> file' to avoid this " +msgstr "" + +#: fread.c:1334 +#, c-format +msgid " File ends abruptly with '%c'. Copying file in RAM. %s copy.\n" +msgstr "" + +#: fread.c:1368 +msgid "[05] Skipping initial rows if needed\n" +msgstr "" + +#: fread.c:1374 +#, 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:1380 +#, c-format +msgid "" +"Found skip='%s' on line %. Taking this to be header row or first row " +"of data.\n" +msgstr "" + +#: fread.c:1393 +#, c-format +msgid " Skipped to line % in the file" +msgstr "" + +#: fread.c:1394 +#, c-format +msgid "skip=% but the input only has % line%s" +msgstr "" + +#: fread.c:1403 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "" + +#: fread.c:1405 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr "" + +#: fread.c:1406 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr "" + +#: fread.c:1424 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "" + +#: fread.c:1428 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr "" + +#: fread.c:1447 +msgid " Detecting sep automatically ...\n" +msgstr "" + +#: fread.c:1454 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr "" + +#: fread.c:1488 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1538 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1545 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr "" + +#: fread.c:1561 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "" + +#: fread.c:1566 +#, 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:1582 +#, c-format +msgid "" +"Internal error: ncol==%d line==%d after detecting sep, ncol and first line" +msgstr "" + +#: fread.c:1585 +#, c-format +msgid "Internal error: first line has field count %d but expecting %d" +msgstr "" + +#: fread.c:1587 +#, 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:1589 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr "" + +#: fread.c:1590 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr "" + +#: fread.c:1596 +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:1597 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr "" + +#: fread.c:1603 +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:1622 +msgid "" +"[07] Detect column types, good nrow estimate and whether first row is column " +"names\n" +msgstr "" + +#: fread.c:1623 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr "" + +#: fread.c:1627 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1648 +#, c-format +msgid " Number of sampling jump points = %d because " +msgstr "" + +#: fread.c:1649 +#, c-format +msgid "nrow limit (%) supplied\n" +msgstr "" + +#: fread.c:1650 +msgid "jump0size==0\n" +msgstr "" + +#: fread.c:1651 +#, c-format +msgid "" +"(% bytes from row 1 to eof) / (2 * % jump0size) == " +"%\n" +msgstr "" + +#: fread.c:1689 +#, 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:1690 +msgid "few" +msgstr "" + +#: fread.c:1690 +msgid "many" +msgstr "" + +#: fread.c:1690 +msgid "" +"Most likely this jump landed awkwardly so type bumps here will be skipped." +msgstr "" + +#: fread.c:1716 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1729 +#, 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:1741 +msgid "" +"Internal error: row before first data row has the same number of fields but " +"we're not using it." +msgstr "" + +#: fread.c:1742 +msgid "" +"Internal error: ch!=pos after counting fields in the line before the first " +"data row." +msgstr "" + +#: fread.c:1743 +#, 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:1746 +#, 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:1747 +msgid "" +" for the first column which is guessed to be row names or an index. Use " +"setnames() afterwards if this guess is not correct, or fix the file write " +"command that created the file to create a valid file." +msgstr "" + +#: fread.c:1747 +msgid "s at the end." +msgstr "" + +#: fread.c:1749 +msgid "" +"Internal error: fill=true but there is a previous row which should already " +"have been filled." +msgstr "" + +#: fread.c:1750 +#, 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:1754 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1774 +#, c-format +msgid "" +" 'header' determined to be %s because there are%s number fields in the " +"first and only row\n" +msgstr "" + +#: fread.c:1774 +msgid " no" +msgstr "" + +#: fread.c:1777 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "" + +#: fread.c:1779 +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:1795 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1804 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=% " +"exactly\n" +msgstr "" + +#: fread.c:1816 fread.c:1823 +msgid " =====\n" +msgstr "" + +#: fread.c:1817 +#, c-format +msgid "" +" Sampled % rows (handled \\n inside quoted fields) at %d jump " +"points\n" +msgstr "" + +#: fread.c:1818 +#, c-format +msgid "" +" Bytes from first data row on line %d to the end of last row: %\n" +msgstr "" + +#: fread.c:1819 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "" + +#: fread.c:1820 +#, c-format +msgid " Estimated number of rows: % / %.2f = %\n" +msgstr "" + +#: fread.c:1821 +#, c-format +msgid "" +" Initial alloc = % rows (% + %d%%) using bytes/" +"max(mean-2*sd,min) clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" + +#: fread.c:1825 +#, c-format +msgid "Internal error: sampleLines(%) > allocnrow(%)" +msgstr "" + +#: fread.c:1829 +#, c-format +msgid " Alloc limited to lower nrows=% passed in.\n" +msgstr "" + +#: fread.c:1841 +msgid "[08] Assign column names\n" +msgstr "" + +#: fread.c:1849 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "" + +#: fread.c:1871 +#, c-format +msgid "Internal error: reading colnames ending on '%c'" +msgstr "" + +#: fread.c:1889 +msgid "[09] Apply user overrides on column types\n" +msgstr "" + +#: fread.c:1893 +msgid " Cancelled by user: userOverride() returned false." +msgstr "" + +#: fread.c:1903 +#, c-format +msgid "Failed to allocate %d bytes for size array: %s" +msgstr "" + +#: fread.c:1910 +#, 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:1924 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr "" + +#: fread.c:1932 +msgid "[10] Allocate memory for the datatable\n" +msgstr "" + +#: fread.c:1933 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with % rows\n" +msgstr "" + +#: fread.c:1987 +#, c-format +msgid "Buffer size % is too large\n" +msgstr "" + +#: fread.c:1990 +msgid "[11] Read the data\n" +msgstr "" + +#: fread.c:1993 +#, c-format +msgid " jumps=[%d..%d), chunk_size=%, total_size=%\n" +msgstr "" + +#: fread.c:2005 +#, c-format +msgid "Internal error: Master thread is not thread 0 but thread %d.\n" +msgstr "" + +#: fread.c:2213 +#, c-format +msgid "" +"Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row " +"%\n" +msgstr "" + +#: fread.c:2262 +#, c-format +msgid "" +"Internal error: invalid head position. jump=%d, headPos=%p, thisJumpStart=" +"%p, sof=%p" +msgstr "" + +#: fread.c:2335 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional % rows (now nrows=" +"%) and continue reading from jump %d\n" +msgstr "" + +#: fread.c:2342 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr "" + +#: fread.c:2362 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr "" + +#: fread.c:2398 +#, c-format +msgid "" +"Read % rows x %d columns from %s file in %02d:%06.3f wall clock " +"time\n" +msgstr "" + +#: fread.c:2405 +msgid "[12] Finalizing the datatable\n" +msgstr "" + +#: fread.c:2406 +msgid " Type counts:\n" +msgstr "" + +#: fread.c:2408 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "" + +#: fread.c:2424 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "" + +#: fread.c:2429 +#, c-format +msgid "" +"Stopped early on line %. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" + +#: fread.c:2435 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line " +"%: <<%s>>. If the fields are not quoted (e.g. field separator does " +"not appear within any field), try quote=\"\" to avoid this warning." +msgstr "" + +#: fread.c:2439 +msgid "=============================\n" +msgstr "" + +#: fread.c:2441 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "" + +#: fread.c:2442 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "" + +#: fread.c:2444 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr "" + +#: fread.c:2445 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using % sample rows\n" +msgstr "" + +#: fread.c:2447 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of % rows x %d cols (%.3fGB) of which " +"% (%3.0f%%) rows used\n" +msgstr "" + +#: fread.c:2451 +#, 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:2453 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr "" + +#: fread.c:2454 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr "" + +#: fread.c:2455 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr "" + +#: fread.c:2456 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "" + +#: fread.c:2458 +#, 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:14 froll.c:223 froll.c:407 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "" + +#: froll.c:32 froll.c:240 froll.c:456 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "" + +#: froll.c:39 froll.c:247 frolladaptive.c:19 frolladaptive.c:214 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "" + +#: froll.c:48 froll.c:251 +#, c-format +msgid "%s: running for input length %, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:68 froll.c:78 froll.c:169 froll.c:271 froll.c:281 froll.c:362 +#: frolladaptive.c:58 frolladaptive.c:147 frolladaptive.c:247 +#: frolladaptive.c:326 +#, c-format +msgid "" +"%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in " +"input, use default hasNA=NA to avoid this warning" +msgstr "" + +#: froll.c:71 froll.c:173 froll.c:274 froll.c:366 frolladaptive.c:61 +#: frolladaptive.c:151 frolladaptive.c:250 frolladaptive.c:330 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "" + +#: froll.c:81 froll.c:284 +#, 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:137 froll.c:335 +#, c-format +msgid "" +"%s: running in parallel for input length %, window %d, hasna %d, " +"narm %d\n" +msgstr "" + +#: froll.c:175 froll.c:368 frolladaptive.c:153 frolladaptive.c:332 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE " +"so in 'exact' implementation NAs were handled already, no need to re-run\n" +msgstr "" + +#: froll.c:424 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "" + +#: froll.c:431 +#, 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:434 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "" + +#: froll.c:463 +#, 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:152 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:329 +#, 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:29 frolladaptive.c:218 +#, c-format +msgid "%s: running for input length %, hasna %d, narm %d\n" +msgstr "" + +#: frolladaptive.c:35 frolladaptive.c:224 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "" + +#: frolladaptive.c:71 frolladaptive.c:260 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "" + +#: frolladaptive.c:114 frolladaptive.c:298 +#, c-format +msgid "%s: running in parallel for input length %, 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=%, lastBatchSize=" +"%)\n" +msgstr "" + +#: fsort.c:231 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +msgstr "" + +#: fsort.c:247 +msgid "Top 5 MSB counts: " +msgstr "" + +#: fsort.c:247 +#, c-format +msgid "% " +msgstr "" + +#: fsort.c:247 fwrite.c:702 fwrite.c:966 +msgid "\n" +msgstr "" + +#: fsort.c:248 +#, c-format +msgid "Reduced MSBsize from %d to " +msgstr "" + +#: fsort.c:252 +#, c-format +msgid "%d by excluding 0 and 1 counts\n" +msgstr "" + +#: fsort.c:309 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" +msgstr "" + +#: fwrite.c:613 +#, c-format +msgid "buffMB=%d outside [1,1024]" +msgstr "" + +#: fwrite.c:620 +#, c-format +msgid "" +"eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" +msgstr "" + +#: fwrite.c:623 +msgid "Column writers: " +msgstr "" + +#: fwrite.c:625 fwrite.c:627 fwrite.c:629 +#, c-format +msgid "%d " +msgstr "" + +#: fwrite.c:628 +msgid "... " +msgstr "" + +#: fwrite.c:631 +#, c-format +msgid "" +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=% args.ncol=" +"%d eolLen=%d\n" +msgstr "" + +#: fwrite.c:664 +#, c-format +msgid "Internal error: type %d has no max length method implemented" +msgstr "" + +#: fwrite.c:671 +#, c-format +msgid "maxLineLen=%. Found in %.3fs\n" +msgstr "" + +#: fwrite.c:691 +#, 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:692 +#, 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:700 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " +msgstr "" + +#: fwrite.c:713 +#, c-format +msgid "Unable to allocate %d MiB for header: %s" +msgstr "" + +#: fwrite.c:741 fwrite.c:803 +msgid "Can't allocate gzip stream structure" +msgstr "" + +#: fwrite.c:748 +#, c-format +msgid "Unable to allocate %d MiB for zbuffer: %s" +msgstr "" + +#: fwrite.c:764 +#, c-format +msgid "Compress gzip error: %d" +msgstr "" + +#: fwrite.c:765 fwrite.c:773 fwrite.c:972 +#, c-format +msgid "%s: '%s'" +msgstr "" + +#: fwrite.c:770 +#, c-format +msgid "done in %.3fs\n" +msgstr "" + +#: fwrite.c:772 +msgid "No data rows present (nrow==0)\n" +msgstr "" + +#: fwrite.c:790 +#, c-format +msgid "" +"Writing % rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d)\n" +msgstr "" + +#: fwrite.c:980 +#, c-format +msgid "" +"zlib %s (zlib.h %s) deflate() returned error %d with z_stream->msg==\"%s\" " +"Z_FINISH=%d Z_BLOCK=%d. %s" +msgstr "" + +#: fwrite.c:982 +msgid "" +"Please include the full output above and below this message in your data." +"table bug report." +msgstr "" + +#: fwrite.c:983 +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 gsumm.c:46 gsumm.c:47 +#, c-format +msgid "%s 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 gsumm.c:693 gsumm.c:812 gsumm.c:955 gsumm.c:1005 +#: gsumm.c:1085 gsumm.c:1176 gsumm.c:1266 gsumm.c:1409 +#, c-format +msgid "nrow [%d] != length(x) [%d] in %s" +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: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: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: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: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: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: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: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:233 +#, c-format +msgid "" +"Pointers are %d bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "" + +#: init.c:247 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "" + +#: init.c:248 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "" + +#: init.c:249 +#, c-format +msgid "Checking sizeof(int) [%d] is 4 %s" +msgstr "" + +#: init.c:250 +#, c-format +msgid "Checking sizeof(double) [%d] is 8 %s" +msgstr "" + +#: init.c:252 +#, c-format +msgid "Checking sizeof(long long) [%d] is 8 %s" +msgstr "" + +#: init.c:253 +#, c-format +msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" +msgstr "" + +#: init.c:254 +#, c-format +msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" +msgstr "" + +#: init.c:255 +#, c-format +msgid "Checking sizeof(uint64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:256 +#, c-format +msgid "Checking sizeof(int64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:257 +#, c-format +msgid "Checking sizeof(signed char) [%d] is 1 %s" +msgstr "" + +#: init.c:258 +#, c-format +msgid "Checking sizeof(int8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:259 +#, c-format +msgid "Checking sizeof(uint8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:260 +#, c-format +msgid "Checking sizeof(int16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:261 +#, c-format +msgid "Checking sizeof(uint16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:264 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "" + +#: init.c:265 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" +msgstr "" + +#: init.c:272 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "" + +#: init.c:275 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "" + +#: init.c:278 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "" + +#: init.c:281 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "" + +#: init.c:284 +msgid "The ascii character '/' is not just before '0'" +msgstr "" + +#: init.c:285 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "" + +#: init.c:286 +msgid "The ascii character ':' is not just after '9'" +msgstr "" + +#: init.c:287 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "" + +#: init.c:292 +#, c-format +msgid "Conversion of NA_INT64 via double failed %!=%" +msgstr "" + +#: init.c:296 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "" + +#: init.c:297 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "" + +#: init.c:298 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:299 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:328 +#, c-format +msgid "PRINTNAME(install(\"integer64\")) has returned %s not %s" +msgstr "" + +#: init.c:397 +msgid ".Last.value in namespace is not a length 1 integer" +msgstr "" + +#: nafill.c:99 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "" + +#: nafill.c:101 nafill.c:111 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "" + +#: nafill.c:149 nafill.c:180 +msgid "" +"Internal error: invalid type argument in nafillR function, should have been " +"caught before. Please report to data.table issue tracker." +msgstr "" + +#: nafill.c:196 +#, 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 % 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 % 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:298 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" + +#: rbindlist.c:316 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d." +msgstr "" + +#: rbindlist.c:326 +#, c-format +msgid "" +"Internal error: column %d of result is determined to be integer64 but " +"maxType=='%s' != REALSXP" +msgstr "" + +#: rbindlist.c:362 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "" + +#: rbindlist.c:383 +#, 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:388 +#, 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:433 +#, 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:523 +#, 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 " +"% != length of first element = %." +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:66 +msgid "First argument to setlistelt must be a list()" +msgstr "" + +#: wrappers.c:67 +msgid "Second argument to setlistelt must a length 1 integer vector" +msgstr "" + +#: wrappers.c:69 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "" + +#: wrappers.c:91 +msgid "x isn't a VECSXP" +msgstr "" + +#: wrappers.c:106 +#, 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..6a95727f07 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,4743 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-30 01:24+0800\n" +"PO-Revision-Date: 2019-11-18 00:26-04\n" +"Last-Translator: Yuhang Chen \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:7 +msgid "Internal error: finalizer hasn't received an ExternalPtr" +msgstr "内部错误: 结束操作(finalizer)没有收到ExternalPtr" + +#: assign.c:9 +msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +msgstr "内部错误: 结束操作(finalizer)的ExternalPtr没有在tag中找到命名" + +#: assign.c:12 +#, c-format +msgid "Internal error: finalizer sees l=%d, tl=%d" +msgstr "内部错误: 结束操作(finalizer)检测到l=%d, tl=%d" + +#: assign.c:121 +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 "" +".internal.selfref ptr为空。 这是从磁盘加载data.table的正常现象请在装载结束后" +"立刻运行setDT()操作避免发生异常行为。 如果该data.table不是从磁盘读取或已经运" +"行了setDT(), 请报告data.table异常行为到问题跟踪器(issue tracker)\n" + +#: assign.c:124 +msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" +msgstr "内部错误: .internal.selfref ptr不为NULL或R_NilValue" + +#: assign.c:126 +msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" +msgstr "内部错误: .internal.selfref ptr不为NULL或字符向量" + +#: assign.c:168 +msgid "Internal error: length(names)>0 but =0 and not NA." +msgstr "getOption('datatable.alloc')值为%d, 其必须大于等于零且不能为NA" + +#: assign.c:239 fsort.c:109 +msgid "verbose must be TRUE or FALSE" +msgstr "verbose参数必须为TRUE或FALSE" + +#: assign.c:287 +msgid "assign has been passed a NULL dt" +msgstr "赋值已经被传递给一个空的(NULL)dt" + +#: assign.c:288 +msgid "dt passed to assign isn't type VECSXP" +msgstr "传递给赋值操作的dt不是VECSXP类型" + +#: assign.c:290 +msgid "" +".SD is locked. Updating .SD by reference using := or set are reserved for " +"future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, " +"until shallow() is exported." +msgstr "" +".SD被锁定。 使用':='更新.SD操作保留将来使用对'j'直接使用':=', 或可以使用" +"copy(.SD), 直到导出shallow()" + +#: assign.c:298 +msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" +msgstr "内部错误: 传递给赋值操作的dt不是data.table或data.frame类型" + +#: assign.c:302 +msgid "dt passed to assign has no names" +msgstr "传递给赋值操作的dt没有命名" + +#: assign.c:304 +#, c-format +msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" +msgstr "赋值的内部错误: names的长度(%d)与dt的长度(%d)不匹配" + +#: assign.c:306 +msgid "" +"data.table is NULL; malformed. A null data.table should be an empty list. " +"typeof() should always return 'list' for data.table." +msgstr "" +"data.table为空, 格式错误,一个null的data.table应该为空的列表list即对data." +"table使用typeof()函数应该返回'list'类型" + +#: assign.c:315 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "为所有的%d行赋值\n" + +#: assign.c:320 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "将i由数值型强制转换为整数型。请直接传入整数以提高效率,如传入2L而非2" + +#: assign.c:323 +#, c-format +msgid "" +"i is type '%s'. Must be integer, or numeric is coerced with warning. If i is " +"a logical subset, simply wrap with which(), and take the which() outside the " +"loop if possible for efficiency." +msgstr "" +"i 为 '%s' 类型。i 必须为整(integer)型,或数值(numeric)型(将被自动转换成" +"整型并发出警告)。如果 i 为一个用于筛选的逻辑(logical)向量,请直接将它传给 " +"which(),且如果可能的话将 which() 放置于循环之外以保持高效。" + +#: assign.c:329 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]." +msgstr "i[%d] 为 %d 且超出了范围 [1,nrow=%d]。" + +#: assign.c:332 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "正在为 %d 行(总数为 %d 行)进行赋值\n" + +#: assign.c:340 +#, c-format +msgid "Added %d new column%s initialized with all-NA\n" +msgstr "添加了 %d 个新列 %s 并全部初始化为 NA\n" + +#: assign.c:345 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "左手侧长度为0(length(LHS)==0);没有列可供删除或赋值给右手侧(RHS)。" + +#: assign.c:359 +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 "" +"数据框(data.frame)的 set() 是用于修改现有列,而非添加新列。请使用 data." +"table 来添加新列。data.table 的操作是超额分配的(over-allocated)并且不进行浅" +"拷贝(shallow copy)。" + +#: assign.c:370 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" +"将 j 从数值(numeric)型自动转换为整(integer)型。为了保持高效请直接传入整" +"型,如2L 而非 2" + +#: assign.c:373 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" +"j 为 '%s' 型。j 必须为整(integer)型、字符(character)型,或数值(numeric)" +"型(将被自动转换成整型并发出警告)。" + +#: assign.c:375 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "在一次查询中无法对同一列赋值两次(检测出重复项)。" + +#: assign.c:376 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "指定了 newcolnames 但其并非一字符串向量" + +#: assign.c:378 +#, c-format +msgid "RHS_list_of_columns == %s\n" +msgstr "RHS_list_of_columns == %s\n" + +#: assign.c:383 +#, c-format +msgid "" +"RHS_list_of_columns revised to true because RHS list has 1 item which is " +"NULL, or whose length %d is either 1 or targetlen (%d). Please unwrap RHS.\n" +msgstr "" +"RHS_list_of_columns 改为真(True),因为右手侧列表(RHS list)有一子项为空值" +"(NULL)或长度 %d 为 1 或 targetlen(%d)。请拆开右手侧。\n" + +#: assign.c:388 +#, c-format +msgid "" +"Supplied %d columns to be assigned an empty list (which may be an empty data." +"table or data.frame since they are lists too). To delete multiple columns " +"use NULL instead. To add multiple empty list columns, use list(list())." +msgstr "" +"试图将 %d 列赋值为空列表(可能为空数据、表(table)或数据框(data.frame),因" +"后两者也是列表的一种)。删除多个列时请使用空值(NULL)。添加多个空列表列" +"(list columns)时,请使用 list(list())。" + +#: assign.c:393 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" +msgstr "" +"回收重用(Recycling)单个右手侧(RHS)列表子项于 %d 列。请拆开右手侧。\n" + +#: assign.c:395 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "试图将 %2$d 项赋值给 %1$d 列。请阅读 v1.12.2 的更新信息(NEWS)。" + +#: assign.c:403 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. " +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that." +msgstr "" +"j 中的列编号里第 %d 项是 %d,超出了有效范围 [1,ncol=%d]。数据框(data.frame)" +"的 set() 是用于修改现有列,而非添加新列。请使用 data.table 来添加新列。" + +#: assign.c:404 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use " +"column names instead in j to add new columns." +msgstr "" +"j 中的列编号里第 %d 项是 %d,超出了有效范围 [1,ncol=%d]。请在 j 中使用列名来" +"添加新列。" + +#: assign.c:409 +msgid "When deleting columns, i should not be provided" +msgstr "当删除列时,不应指定 i" + +#: assign.c:415 +#, c-format +msgid "" +"RHS of assignment to existing column '%s' is zero length but not NULL. If " +"you intend to delete the column use NULL. Otherwise, the RHS must have " +"length > 0; e.g., NA_integer_. If you are trying to change the column type " +"to be an empty list column then, as with all column type changes, provide a " +"full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the " +"new column." +msgstr "" +"对已有列 '%s' 的赋值其右手侧(RHS)长度为零但并非空值(NULL)。如果想要删除列" +"请使用空值(NULL)。否则,右手侧必须长度 > 0,如 NA_integer_。如果想将该列类" +"型修改为空列表列(list column),正如所有修改列类型的操作一样,请在右手侧提供" +"一个与该列原数据等长的向量,如 vector('list',nrow(DT)),即,用新数据替换" +"(plonk)重新生成该列。" + +#: assign.c:420 +#, c-format +msgid "" +"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" +msgstr "assign.c 内部错误:length(newcolnames)=%d, length(names)=%d, coln=%d" + +#: assign.c:422 +#, c-format +msgid "Column '%s' does not exist to remove" +msgstr "要删除的列 '%s' 不存在" + +#: assign.c:428 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "':=' 右手侧(RHS)%d 列矩阵将被视为一维向量" + +#: assign.c:432 +#, c-format +msgid "" +"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " +"character, factor, integer or numeric)" +msgstr "" +"无法给因子(factor)类型列 '%s' 赋类型为 '%s' 的值(不是字符(character)、因" +"子(factor)、整数(integer)或数值(numeric)类中的一种)" + +#: assign.c:437 +#, c-format +msgid "" +"Supplied %d items to be assigned to %d items of column '%s'. If you wish to " +"'recycle' the RHS please use rep() to make this intent clear to readers of " +"your code." +msgstr "" +"试图将 %d 项赋值给 %d 项(列 '%s')。如果想'回收重用'('recycle')右手侧,请" +"使用 rep() 以将该意图清晰地表述给阅读代码的人。" + +#: assign.c:447 +msgid "" +"This data.table has either been loaded from disk (e.g. using readRDS()/" +"load()) or constructed manually (e.g. using structure()). Please run setDT() " +"or setalloccol() on it first (to pre-allocate space for new columns) before " +"assigning by reference to it." +msgstr "" +"此 data.table 是从硬盘导入(例如 readRDS()/load() )或者手动创建(例如 " +"structure() )。在通过引用的方式进行赋值前,请先运行 setDT() 或 setalloccol() " +"来为增加的列预先分配空间" + +#: assign.c:448 +#, c-format +msgid "" +"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +"issue tracker, including result of sessionInfo()." +msgstr "" +"内部错误: oldtncol(%d) < oldncol(%d)。 请将此问题汇报给 data.table 问题追踪" +"器,包括 sessionInfo() 的信息。" + +#: assign.c:450 +#, c-format +msgid "" +"truelength (%d) is greater than 10,000 items over-allocated (length = %d). " +"See ?truelength. If you didn't set the datatable.alloccol option very large, " +"please report to data.table issue tracker including the result of " +"sessionInfo()." +msgstr "" +"truelength (%d) 的值大于超额分配的 10000 项 (length = %d)。请查看 ?" +"truelength。如果你没有将 datatable.alloccol 设置为非常大的数值,请将此问题汇" +"报给 data.table 问题追踪器,包含 sessionInfo() 的信息" + +#: assign.c:452 +#, c-format +msgid "" +"Internal error: DT passed to assign has not been allocated enough column " +"slots. l=%d, tl=%d, adding %d" +msgstr "" +"内部错误: 传递出去赋值的 DT 没有被分配足够的列槽。 l=%d, tl=%d, 增加 %d" + +#: assign.c:454 +msgid "" +"It appears that at some earlier point, names of this data.table have been " +"reassigned. Please ensure to use setnames() rather than names<- or " +"colnames<-. Otherwise, please report to data.table issue tracker." +msgstr "" +"此 data.table 的名称在早先已经被重新赋值。请确保使用 setnames() 而不是 " +"names<- 或 colnames<- 进行赋值。如果该办法无效,请将此问题汇报给 data.table " +"问题追踪器,包含 sessionInfo() 的信息" + +#: assign.c:458 +#, c-format +msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" +msgstr "内部错误: selfrefnames 正确,但 tl 的名称 [%d] != tl [%d]" + +#: assign.c:469 +msgid "" +"Internal error: earlier error 'When deleting columns, i should not be " +"provided' did not happen." +msgstr "内部错误: 前期的错误 '当删除列的时候,不应该提供参数 i ' 没有发生" + +#: assign.c:480 +#, 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 "" +"因为 NAMED==%d MAYBE_SHARED==%d, 所以条目 %d 的 RHS 已经被复制,但是接下来又" +"要被替换了。length(values)==%d; length(cols)==%d)\n" + +#: assign.c:485 +#, c-format +msgid "Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n" +msgstr "直接替换没有名字的 RHS,并没有复制。 NAMED==%d, MAYBE_SHARED==%d\n" + +#: assign.c:554 +#, c-format +msgid "" +"Dropping index '%s' as it doesn't have '__' at the beginning of its name. It " +"was very likely created by v1.9.4 of data.table.\n" +msgstr "" +"丢掉索引 '%s' 因为它的名字前面没有 '__' 。这个很可能是 data.table v1.9.4 创建" +"的\n" + +#: assign.c:562 +msgid "Internal error: index name ends with trailing __" +msgstr "内部错误: 索引名称以 __ 结尾" + +#: assign.c:567 +msgid "Internal error: Couldn't allocate memory for s4." +msgstr "内部错误: 不能给 s4 分配内存" + +#: assign.c:578 +msgid "Internal error: Couldn't allocate memory for s5." +msgstr "内部错误: 不能给 s5 分配内存" + +#: assign.c:599 assign.c:615 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr " 因为一个主列的更新,丢掉索引 '%s'\n" + +#: assign.c:608 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "因为一个主列的更新,缩短索引 '%s' 到 '%s'\n" + +#: assign.c:680 +#, c-format +msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" +msgstr "内部错误: 早期未被发现的循环长度错误 slen=%d len=%d" + +#: assign.c:684 +msgid "Internal error: memrecycle has received NULL colname" +msgstr "内部错误: memrecycle 接受到的列名为 NULL " + +#: assign.c:710 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" +"不能将 'factor' 赋值为 '%s' 。因子类型只能赋值为因子,字符或者列表其中的列" + +#: assign.c:724 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "将列 %d 名称为 '%s' 赋值为因子。但是 %d 在层次范围[1,%d]之外" + +#: assign.c:732 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %f is outside the " +"level range [1,%d], or is not a whole number." +msgstr "" +"将列 %d 名称为 '%s' 赋值为因子。但是 %f 在层次范围[1,%d]之外,或者不是一个完" +"整的数字" + +#: assign.c:738 +#, c-format +msgid "" +"Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " +"character, NA in any type, or level numbers." +msgstr "" +"不能将 'factor' 赋值为 '%s' 。 因子列可被赋值为因子,字符 ,NA 或者 层次数值" + +#: assign.c:759 +msgid "" +"Internal error: levels of target are either not unique or have truelength<0" +msgstr "内部错误: 目标的层次不是唯一或者长度<0" + +#: assign.c:798 +#, c-format +msgid "Unable to allocate working memory of %d bytes to combine factor levels" +msgstr "不能分配 %d 字节的工作内存来组合因子层次" + +#: assign.c:805 +msgid "Internal error: extra level check sum failed" +msgstr "内部错误: 额外的层次校验和失败" + +#: assign.c:824 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of the target column " +"(column %d named '%s')." +msgstr "将'character' RHS 强制转换成 '%s' 来匹配目标列的类型(列 %d 名称 '%s')" + +#: assign.c:830 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " +"column (column %d named '%s')." +msgstr "" +"不能将'list' RHS 强制转换成 'integer64' 来匹配目标列的类型(列 %d 名称 '%s')" + +#: assign.c:835 +#, c-format +msgid "" +"Coercing 'list' RHS to '%s' to match the type of the target column (column " +"%d named '%s')." +msgstr "将'list' RHS 强制转换成 '%s' 来匹配目标列的类型(列 %d 名称 '%s')" + +#: assign.c:841 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" +msgstr "当 '%s' 赋值成 '%s' 列 %d 名称 '%s',进行Zero-copy强制转换。\n" + +#: assign.c:936 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "类型 '%s' 不能强制转换成 '%s'" + +#: assign.c:1056 +msgid "" +"To assign integer64 to a character column, please use as.character() for " +"clarity." +msgstr "请使用 as.character() 把 integer64 类型的数值赋值给字符列" + +#: assign.c:1068 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "assign.c:memrecycle '%s' 里有不支持的列的类型" + +#: assign.c:1115 +#, c-format +msgid "Internal error: writeNA passed a vector of type '%s'" +msgstr "内部错误:writeNA 函数读取到了一个类型是'%s'的向量" + +#: assign.c:1146 +#, c-format +msgid "" +"Internal error: savetl_init checks failed (%d %d %p %p). please report to " +"data.table issue tracker." +msgstr "" +"内部错误:savetl_init的校验失败 (%d %d %p %p),请将此问题汇报给data.table 问" +"题追踪器。" + +#: assign.c:1154 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "不能为 savetl_init 最开始的 %d 个项分配空间" + +#: assign.c:1163 +#, c-format +msgid "" +"Internal error: reached maximum %d items for savetl. Please report to data." +"table issue tracker." +msgstr "" +"内部错误:已经达到了 savetl 能处理的子项上限 %d。请将此问题汇报给data.table问" +"题追踪器。" + +#: assign.c:1170 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "不能给 savetl 里的 %d 个项重新分配 saveds" + +#: assign.c:1176 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "不能给savetl里的 %d 个项提供 savetl" + +#: assign.c:1199 +msgid "x must be a character vector" +msgstr "x 必须是一个字符向量" + +#: assign.c:1200 +msgid "'which' must be an integer vector" +msgstr "'which' 必须是一个整数向量" + +#: assign.c:1201 +msgid "'new' must be a character vector" +msgstr "'new' 必须是一个字符向量" + +#: assign.c:1202 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "'new' 的长度是 %d。 它的长度必须和'which' (%d)的长度一致。" + +#: assign.c:1205 +#, c-format +msgid "" +"Item %d of 'which' is %d which is outside range of the length %d character " +"vector" +msgstr "'which' 的 %d 项是 %d,这超出了 %d 字符的长度范围" + +#: assign.c:1215 +msgid "dt passed to setcolorder has no names" +msgstr "setcolorder读取到的dt并没有名字" + +#: assign.c:1217 +#, c-format +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "内部错误: setcolorder读取到的dt有 %d 列但是有 %d 个名字。" + +#: assign.c:1224 +msgid "" +"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" +msgstr "内部错误: Csetcolorder读取到的o有一个NA(缺失值)或者是下标出界" + +#: assign.c:1226 +msgid "Internal error: o passed to Csetcolorder contains a duplicate" +msgstr "内部错误: Csetcolorder读取到的o含有一个重复值" + +#: 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 "" +"向量长度不一致:length(x)==%d length(lower)==%d length(upper)==%d。每一个向量" +"要么是长度为一或者是等于最长向量的长度。" + +#: between.c:16 +msgid "incbounds must be TRUE or FALSE" +msgstr "incbounds 必须是 TRUE (真) 或者是 FALSE (假)" + +#: between.c:19 +msgid "NAbounds must be TRUE or NA" +msgstr "NAbounds 必须是 TRUE (真) 或者是 FALSE (假)" + +#: between.c:22 +msgid "check must be TRUE or FALSE" +msgstr "check 必须是 TRUE (真) 或者是 FALSE (假)" + +#: between.c:64 +#, c-format +msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" +msgstr "lower (%2$d) 的 %1$d 项大于 upper (%3$d)的 %4$d 项" + +#: between.c:82 +#, c-format +msgid "between parallel processing of integer took %8.3fs\n" +msgstr "整数的并行运行时间一共花费了 %8.3fs\n" + +#: between.c:88 +msgid "x is integer64 but lower and/or upper are not." +msgstr "x 是一个64位整数但是至少在 lower 和 upper 其中有一个不是。" + +#: between.c:95 +#, c-format +msgid "" +"Item %d of lower (%) is greater than item %d of upper (%)" +msgstr "lower (%2$) 的 %1$d 项大于 upper (%4$)的 %3$d 项" + +#: between.c:112 +#, c-format +msgid "between parallel processing of integer64 took %8.3fs\n" +msgstr "64位整数的并行运行时间一共花费了 %8.3fs\n" + +#: between.c:115 +msgid "" +"x is not integer64 but lower and/or upper is integer64. Please align classes." +msgstr "" +"x 不是一个64位整数但是 lower 和 upper 中至少有一个是64位整数,请保证所有的变" +"量类型一致。" + +#: between.c:122 +#, c-format +msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" +msgstr "lower (%2$f) 的 %1$d 项大于 upper (%4$f)的 %3$d 项" + +#: between.c:140 +#, c-format +msgid "between parallel processing of double with open bounds took %8.3fs\n" +msgstr "不设界的双精度浮点数的并行运行时间一共花费了 %8.3fs\n" + +#: between.c:157 +#, c-format +msgid "between parallel processing of double with closed bounds took %8.3fs\n" +msgstr "设界的双精度浮点数的并行运行时间一共花费了 %8.3fs\n" + +#: between.c:172 +#, c-format +msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" +msgstr "lower (%2$s) 的 %1$d 项大于 upper (%4$s)的 %3$d 项" + +#: between.c:187 +#, c-format +msgid "between non-parallel processing of character took %8.3fs\n" +msgstr "字符的并行运行时间一共花费了 %8.3fs\n" + +#: between.c:190 +#, c-format +msgid "" +"Internal error: between.c unsupported type '%s' should have been caught at R " +"level" +msgstr "内部错误: between.c 不支持 '%s' 类型这个问题应该在R运行的时候被发现。" + +#: bmerge.c:48 +msgid "Internal error: icols is not integer vector" +msgstr "内部错误: icols 不是一个整数向量" + +#: bmerge.c:49 +msgid "Internal error: xcols is not integer vector" +msgstr "内部错误: xcols 不是一个整数向量" + +#: bmerge.c:50 +#, c-format +msgid "Internal error: length(icols) [%d] > length(xcols) [%d]" +msgstr "内部错误: icols[%1$d] 的长度大于 xcols[%2$d] 的长度" + +#: bmerge.c:57 +#, c-format +msgid "Internal error. icols[%d] is NA" +msgstr "内部错误: icols[%d] 是 NA, 缺失值" + +#: bmerge.c:58 +#, c-format +msgid "Internal error. xcols[%d] is NA" +msgstr "内部错误: xcols[%d] 是 NA, 缺失值" + +#: bmerge.c:59 +#, c-format +msgid "icols[%d]=%d outside range [1,length(i)=%d]" +msgstr "icols[%1$d]=%2$d 造成了空间溢出,当前范围是[1,length(i)=%3$d]" + +#: bmerge.c:60 +#, c-format +msgid "xcols[%d]=%d outside range [1,length(x)=%d]" +msgstr "xcols[%1$d]=%2$d 造成了空间溢出,当前范围是[1,length(i)=%3$d]" + +#: bmerge.c:63 +#, c-format +msgid "typeof x.%s (%s) != typeof i.%s (%s)" +msgstr "x.%1$s (%2$s) 的数据类型和 i.%3$s (%4$s) 的数据类型并不一致" + +#: bmerge.c:70 +msgid "roll is character but not 'nearest'" +msgstr "roll 是字符但并不是最近的" + +#: bmerge.c:71 +msgid "roll='nearest' can't be applied to a character column, yet." +msgstr "roll='最近的'的功能当前并不能被使用在字符列。" + +#: bmerge.c:74 +msgid "Internal error: roll is not character or double" +msgstr "内部错误: roll 不是字符或者是浮点" + +#: bmerge.c:79 +msgid "rollends must be a length 2 logical vector" +msgstr "rollends 必须是一个长度为2的逻辑向量" + +#: bmerge.c:89 uniqlist.c:270 +msgid "" +"Internal error: invalid value for 'mult'. please report to data.table issue " +"tracker" +msgstr "内部错误: 'mult' 是无效值。 请将此问题汇报给 data.table 问题追踪器。" + +#: bmerge.c:93 +msgid "" +"Internal error: opArg is not an integer vector of length equal to length(on)" +msgstr "内部错误: opArg 不是一个长度为 on 的整数向量" + +#: bmerge.c:96 +msgid "Internal error: nqgrpArg must be an integer vector" +msgstr "内部错误:nqgrpArg 必须为一个整数向量" + +#: bmerge.c:102 +msgid "Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector" +msgstr "内部错误:nqmaxgrpArg不是长度为1的正整型向量" + +#: 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 "内部错误:xoArg不是整型向量" + +#: bmerge.c:271 bmerge.c:379 +#, c-format +msgid "" +"Internal error in bmerge_r for '%s' column. Unrecognized value op[col]=%d" +msgstr "bmerge_r 针对 '%s' 列的操作出现内部错误。无法识别值 op[col]=%d" + +#: bmerge.c:303 +#, c-format +msgid "Only '==' operator is supported for columns of type %s." +msgstr "%s 类型的列仅支持 '==' 操作符。" + +#: bmerge.c:410 +#, c-format +msgid "Type '%s' not supported for joining/merging" +msgstr "'%s' 类型不支持联结/归并" + +#: bmerge.c:468 +msgid "Internal error: xlow!=xupp-1 || xlowxuppIn" +msgstr "内部错误:xlow!=xupp-1 或 xlowxuppIn" + +#: chmatch.c:4 +#, c-format +msgid "x is type '%s' (must be 'character' or NULL)" +msgstr "x 类型为 '%s' (必须为'character'或 NULL)" + +#: chmatch.c:5 +#, c-format +msgid "table is type '%s' (must be 'character' or NULL)" +msgstr "table 类型为 '%s' (必须为 'character' 或 NULL)" + +#: chmatch.c:6 +msgid "Internal error: either chin or chmatchdup should be true not both" +msgstr "内部错误:chin 和 chmatchdup 不能同时为真" + +#: chmatch.c:44 +#, c-format +msgid "" +"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " +"issue on the data.table tracker." +msgstr "" +"内部错误:CHARSXP '%s' 的 truelength (%d) 为负。请将此问题汇报给 data.table " +"问题追踪器。" + +#: chmatch.c:73 +#, c-format +msgid "" +"Failed to allocate % bytes working memory in chmatchdup: " +"length(table)=%d length(unique(table))=%d" +msgstr "" +"无法为 chmatchdup: length(table)=%2$d length(unique(table))=%3$d 分配 " +"%1$ 字节的内存空间" + +#: cj.c:89 +#, c-format +msgid "Type '%s' not supported by CJ." +msgstr "CJ 不支持 '%s' 类型" + +#: coalesce.c:5 +msgid "Internal error in coalesce.c: input is list(...) at R level" +msgstr "内部错误:coalesce.c 中 R 层面的输入为 list(...)" + +#: coalesce.c:7 +msgid "" +"Internal error in coalesce.c: argument 'inplaceArg' must be TRUE or FALSE" +msgstr "内部错误:coalesce.c 中 'inplaceArg' 参数必须为 TRUE 或 FALSE" + +#: 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 "" +"第一个参数是一个 list, data.table 或 data.frame。当前不应该提供其他参数。" + +#: 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 "元素1是一个因子,但元素 %d 不是。当涉及因子时,所有元素必须都为因子。" + +#: coalesce.c:34 +#, c-format +msgid "" +"Item %d is a factor but its levels are not identical to the first item's " +"levels." +msgstr "元素 %d 是一个因子,但因子水平与第一个元素因子水平不同。" + +#: 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 "元素 %d 是一个因子,但元素1不是。当涉及因子时,所有元素必须都为因子。" + +#: coalesce.c:41 +#, c-format +msgid "" +"Item %d is type %s but the first item is type %s. Please coerce before " +"coalescing." +msgstr "" +"元素 %d 类型为 %s,但是第一个元素类型为 %s。请在 coalescing 之前强制转换类" +"型。" + +#: coalesce.c:43 +#, c-format +msgid "Item %d has a different class than item 1." +msgstr "元素 %d 与元素1类型不同。" + +#: coalesce.c:46 +#, c-format +msgid "" +"Item %d is length %d but the first item is length %d. Only singletons are " +"recycled." +msgstr "" +"元素 %d 长度为 %d,但第一个元素长度为 %d。只有长度为1的元素才会进行循环补齐。" + +#: coalesce.c:50 +msgid "coalesce copied first item (inplace=FALSE)\n" +msgstr "coalesce 复制了第一项 (inplace=FALSE)\n" + +#: coalesce.c:166 +#, c-format +msgid "Unsupported type: %s" +msgstr "不支持的类型:%s" + +#: dogroups.c:14 +msgid "Internal error: order not integer vector" +msgstr "内部错误:order 不是整型向量" + +#: dogroups.c:15 +msgid "Internal error: starts not integer" +msgstr "内部错误:starts 不是整型" + +#: dogroups.c:16 +msgid "Internal error: lens not integer" +msgstr "内部错误:lens 不是整型" + +#: dogroups.c:18 +msgid "Internal error: jiscols not NULL but o__ has length" +msgstr "内部错误:jiscols 非 NULL,但 o__ 长度不为0" + +#: dogroups.c:19 +msgid "Internal error: xjiscols not NULL but o__ has length" +msgstr "内部错误:jiscols 非 NULL,但 o__ 长度不为0" + +#: dogroups.c:20 +msgid "'env' should be an environment" +msgstr "'env' 应该是一个环境" + +#: dogroups.c:39 +#, c-format +msgid "" +"Internal error: unsupported size-0 type '%s' in column %d of 'by' should " +"have been caught earlier" +msgstr "" +"内部错误:未能被提前捕获到 'by' 中第 %2$d 列不支持类型 '%1$s' 且size-0 的问题" + +#: dogroups.c:43 +#, c-format +msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" +msgstr "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" + +#: dogroups.c:62 +msgid "row.names attribute of .SD not found" +msgstr ".SD 的行名属性不存在" + +#: 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 "" +".SD 的行名不是长度为2且首个元素为 NA 的整型;例如:set_row_names(). [%s %d " +"%d]" + +#: dogroups.c:69 +msgid "length(names)!=length(SD)" +msgstr "length(names)!=length(SD)" + +#: dogroups.c:73 +#, c-format +msgid "" +"Internal error: size-0 type %d in .SD column %d should have been caught " +"earlier" +msgstr "内部错误:未能提前捕获到 .SD 中第 %2$d 列类型 %1$d size-0 的问题" + +#: dogroups.c:83 +msgid "length(xknames)!=length(xSD)" +msgstr "length(xknames)!=length(xSD)" + +#: dogroups.c:87 +#, c-format +msgid "" +"Internal error: type %d in .xSD column %d should have been caught by now" +msgstr "内部错误:当前未能捕获到 .xSD 中第 %2$d 列类型 %1$d 的问题" + +#: dogroups.c:91 +#, c-format +msgid "length(iSD)[%d] != length(jiscols)[%d]" +msgstr "length(iSD)[%d] != length(jiscols)[%d]" + +#: dogroups.c:92 +#, c-format +msgid "length(xSD)[%d] != length(xjiscols)[%d]" +msgstr "length(xSD)[%d] != length(xjiscols)[%d]" + +#: 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 "j的运算结果为'%s'类型。其运算结果必须为原子向量或列表。" + +#: 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 "" +"j=list(...) 中的所有项目必须是原子向量或列表如果您试图进行 j=list(.SD," +"newcol=mean(colA)) 之类的操作请使用 := by group 代替(更快速),或事后使用 " +"cbind()、merge()" + +#: dogroups.c:290 +msgid "" +"RHS of := is NULL during grouped assignment, but it's not possible to delete " +"parts of a column." +msgstr "用 := 分组时 RHS 为 NULL但無法刪除部分列" + +#: dogroups.c:294 +#, 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 "" +"提供 %1$d 个项分配给第 '%4$s' 列中的第 %2$d 组,组的大小为 %3$d RHS 的长度必" +"须是 1(可以是单个值) 或完全符合 LHS 的长度如果您想回收(recycle) RHS,请使用 " +"rep() 向你的代码读者明确表达你的意图" + +#: dogroups.c:305 +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 "" +"内部错误 : 尝试依照引用增加新列但 tl 已满在进入 dogroups 之前,setalloccol 应" +"该先在 R 运行" + +#: dogroups.c:320 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "列 '%2$s' 第 %1$d 组 : %3$s" + +#: dogroups.c:327 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "j 估算出的每组的列数不同" + +#: dogroups.c:361 +#, 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 "" +"j 的结果中第 %d 列在第 1 组中为 NULL我们依赖第 1 组的列类型去决定剩余组的类型" +"(需要一致性)空 (NULL) 列可以出现在后面的组(适当的以 NA 取代并回收)但不能是第 " +"1 组请输入空向量代替,例如 integer() 或 numeric()" + +#: dogroups.c:364 +msgid "" +"j appears to be a named vector. The same names will likely be created over " +"and over again for each group and slow things down. Try and pass a named " +"list (which data.table optimizes) or an unnamed list() instead.\n" +msgstr "" +"j 是名称向量,这可能使相同的名称不停重复创建导致速度变慢请尝试输入名称列表(较" +"适合 data.table)或是非名称列表代替\n" + +#: dogroups.c:366 +#, 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 "" +"j 的第 %d 列是名称向量(整行的项都是名称)为了效率请移除这些名称(避免在每组重复" +"创建这些名称)总之他们被忽略了\n" + +#: dogroups.c:374 +msgid "" +"The result of j is a named list. It's very inefficient to create the same " +"names over and over again for each group. When j=list(...), any names are " +"detected, removed and put back after grouping has completed, for efficiency. " +"Using j=transform(), for example, prevents that speedup (consider changing " +"to :=). This message may be upgraded to warning in future.\n" +msgstr "" +"j 的结果是名称列表,在每组不停重复创建相同的名称很没效率为了提高效率,当 " +"j=list(...) 时侦测到的所有名称会被移出,待分组完成后再放回来可以使用 " +"j=transform() 避免这种加速此讯息可能会在未来升级为警告\n" + +#: dogroups.c:386 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "dogroups: 从 %d 列增加至 %d 列\n" + +#: dogroups.c:387 +#, c-format +msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +msgstr "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" + +#: dogroups.c:420 +#, 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 "" +"j 的结果第 %d 项在第 %d 组中为零长度(zero length)将使用 %d 个 NA 填入以符合结" +"果中最长列的长度后面的分组也有相同问题,但只回报第一组以避免过多警告" + +#: dogroups.c:427 +#, c-format +msgid "" +"Column %d of result for group %d is type '%s' but expecting type '%s'. " +"Column types must be consistent for each group." +msgstr "" +"结果的第 %d 列在第 %d 组中是 '%s' 类别而非预期的 '%s' 类别所有组的列类别必须" +"一致" + +#: dogroups.c:429 +#, 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 "" +"提供 %1$d 项给第 %3$d 組的第 %2$d 列,这组有 %4$d 行RHS長度必須為 1 (可以使用" +"單個值) 或與 LHS 長度完全匹配如果您想回收(recycle) RHS,请使用 rep() 向你的代" +"码读者明确表达你的意图" + +#: dogroups.c:444 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "写入的行 (%d) 少于分配的 (%d)\n" + +#: dogroups.c:454 +#, c-format +msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" +msgstr "内部错误 : 区块 0 [%d] 与区块 1 [%d] 都运行了" + +#: dogroups.c:456 +#, c-format +msgid "" +"\n" +" %s took %.3fs for %d groups\n" +msgstr "" +"\n" +" %s 花了 %.3fs 在 %d 个组\n" + +#: dogroups.c:458 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr " eval(j)取%.3fs给 %d 调用\n" + +#: dogroups.c:482 +msgid "growVector passed NULL" +msgstr "growVector通过NULL" + +#: fastmean.c:39 +msgid "narm should be TRUE or FALSE" +msgstr "narm必须是TRUE或FALSE" + +#: fastmean.c:45 +#, c-format +msgid "fastmean was passed type %s, not numeric or logical" +msgstr "传递给 fastmean 的是 %s 类型,而不是数值或逻辑类型" + +#: fastmean.c:83 fastmean.c:111 +#, c-format +msgid "Internal error: type '%s' not caught earlier in fastmean" +msgstr "内部错误:先前fastmean没有侦测到类型 '%s' " + +#: fcast.c:80 +#, c-format +msgid "Unsupported column type in fcast val: '%s'" +msgstr "fcast val不支持的列类型:'%s'" + +#: fifelse.c:5 +msgid "Argument 'test' must be logical." +msgstr "参数'test'必须是逻辑类型。" + +#: 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 "'yes'是%s类型,但'no'是%s类型。请确认两个参数是同一类型。" + +#: fifelse.c:28 +msgid "" +"'yes' has different class than 'no'. Please make sure that both arguments " +"have the same class." +msgstr "'yes'的类型与'no'不同。请确认两个参数是同一类型。" + +#: fifelse.c:33 +msgid "'yes' and 'no' are both type factor but their levels are different." +msgstr "'yes'和'no'都是因子类型但他们的因子水平不同。" + +#: fifelse.c:38 +#, c-format +msgid "" +"Length of 'yes' is % but must be 1 or length of 'test' (%)." +msgstr "'yes'长度是%但长度必须是1或者等于'test'的长度 (%)。" + +#: fifelse.c:40 +#, c-format +msgid "" +"Length of 'no' is % but must be 1 or length of 'test' (%)." +msgstr "'no'长度是%但长度必须是1或者等于'test'的长度 (%)。" + +#: fifelse.c:51 +#, c-format +msgid "Length of 'na' is % but must be 1" +msgstr "'na'长度是%但必须是长度必须是1" + +#: 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 "'yes'是%s类型,但'na'是%s类型。请确认两个参数是同一类型。" + +#: fifelse.c:59 +msgid "" +"'yes' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "'yes'的类型与'na'不同。请确认两个参数是同一类型。" + +#: fifelse.c:63 +msgid "'yes' and 'na' are both type factor but their levels are different." +msgstr "'yes'和'na'都是因子类型但他们的因子水平不同" + +#: fifelse.c:133 +#, c-format +msgid "Type %s is not supported." +msgstr "不支持类型 %s" + +#: fmelt.c:18 +msgid "'x' must be an integer" +msgstr "'x'必须是整数" + +#: fmelt.c:19 +msgid "'n' must be a positive integer" +msgstr "'n'必须是正整数" + +#: fmelt.c:41 +msgid "Argument to 'which' must be logical" +msgstr "'which'的参数必须是逻辑值" + +#: fmelt.c:70 +msgid "concat: 'vec must be a character vector" +msgstr "串联:'vec 必须是一个字符向量" + +#: fmelt.c:71 +msgid "concat: 'idx' must be an integer vector of length >= 0" +msgstr "串联:'idx' 必须为一个长度>= 0的整数向量" + +#: fmelt.c:75 +#, c-format +msgid "" +"Internal error in concat: 'idx' must take values between 0 and length(vec); " +"0 <= idx <= %d" +msgstr "串联内部错误:'idx'必须为0到length(vec)之间的值;0 <= idx <= %d" + +#: fmelt.c:102 +#, c-format +msgid "Unknown 'measure.vars' type %s at index %d of list" +msgstr "未知'measure.vars'类型 %s,位于列表中 %d" + +#: 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 "" +"当'id.vars'和'measure.vars'都是NULL时,data.table会自动猜测适当值。所有非数" +"值/整数/逻辑类型列会作为'id.vars',即以下列 [%s]。以后请考虑择一指定'id." +"vars'或'measure.vars'。" + +#: fmelt.c:154 fmelt.c:219 +#, c-format +msgid "Unknown 'id.vars' type %s, must be character or integer vector" +msgstr "未知'id.vars'类型 %s,必须是字符或者整数向量(vector)" + +#: fmelt.c:159 fmelt.c:223 +msgid "One or more values in 'id.vars' is invalid." +msgstr "'id.vars'里,一或多个数值无效" + +#: fmelt.c:175 +msgid "" +"'measure.vars' is missing. Assigning all columns other than 'id.vars' " +"columns as 'measure.vars'.\n" +msgstr "" +"找不到'measure.vars'。将指定所有'id.vars'以外的所有列为'measure.vars'。\n" + +#: fmelt.c:176 +#, c-format +msgid "Assigned 'measure.vars' are [%s].\n" +msgstr "指定'measure.vars'为[%s]。\n" + +#: fmelt.c:184 +#, c-format +msgid "" +"Unknown 'measure.vars' type %s, must be character or integer vector/list" +msgstr "未知'measure.vars'类型 %s,必须是字符或者整数向量(vector)/列表(list)" + +#: fmelt.c:193 fmelt.c:239 +msgid "One or more values in 'measure.vars' is invalid." +msgstr "'measure.vars'里,一或多个数值无效" + +#: fmelt.c:211 +msgid "" +"'id.vars' is missing. Assigning all columns other than 'measure.vars' " +"columns as 'id.vars'.\n" +msgstr "找不到'id.vars'。将指定所有'measure.vars'以外的所有列为'id.vars'。\n" + +#: fmelt.c:212 +#, c-format +msgid "Assigned 'id.vars' are [%s].\n" +msgstr "指定的 'id.vars' 是 [%s].\n" + +#: fmelt.c:231 +#, c-format +msgid "Unknown 'measure.vars' type %s, must be character or integer vector" +msgstr "未知'measure.vars'类型 %s,必须是字符或者整数向量" + +#: 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 "" +"当'measure.vars'是一个列表(list), 'value.name' 必须是一个长度为1或者等于" +"length(measure.vars)的字符向量" + +#: 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 "" +"当'measure.vars'未被指定或者是一个字符/整数向量时,'value.name'必须是一个长度" +"1的字符/整数向量" + +#: fmelt.c:280 +msgid "'variable.name' must be a character/integer vector of length=1." +msgstr "'variable.name' 必须是长度1的字符/整数向量。" + +#: fmelt.c:329 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects all-character input" +msgstr "内部错误:fmelt.c里的combineFactorLevels期望输入值为全字符" + +#: fmelt.c:332 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects a character target to " +"factorize" +msgstr "内部错误:fmelt.c里的combineFactorLevels期望一个字符来分解" + +#: 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 "" +"'measure.vars'[%1$s] 的数据类型不完全相同。由于融合后的数据将是'%2$s'类型,所" +"以变量中不是'%3$s'类型的数将被强制转换为'%2$s'类型,更多关于强制转换的信息请" +"查看 ?melt.data.table.\n" + +#: fmelt.c:387 +#, c-format +msgid "" +"The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n" +msgstr "在项目%d中,融合后的数值类型是列表,参数'na.rm = TRUE'被自动忽略\n" + +#: fmelt.c:490 +#, c-format +msgid "Unknown column type '%s' for column '%s'." +msgstr "'%s'列是未知的纵列类型: '%s'" + +#: fmelt.c:514 +#, c-format +msgid "Internal error: fmelt.c:getvarcols %d %d" +msgstr "内部错误:fmelt.c : getvarcols %d %d" + +#: fmelt.c:662 +#, c-format +msgid "Unknown column type '%s' for column '%s' in 'data'" +msgstr "'data' 中的'%s'列是未知列类型:'%s'" + +#: fmelt.c:673 +msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" +msgstr "输入类型不是 VECSXP,输入类型应该是 data.table,data.frame 或 list。" + +#: fmelt.c:674 +msgid "Argument 'value.factor' should be logical TRUE/FALSE" +msgstr "'value.factor' 的参数是逻辑值,必须是 TRUE 或FALSE" + +#: fmelt.c:675 +msgid "Argument 'variable.factor' should be logical TRUE/FALSE" +msgstr "'variable.factor' 的参数是逻辑值,必须是 TRUE 或FALSE" + +#: fmelt.c:676 +msgid "Argument 'na.rm' should be logical TRUE/FALSE." +msgstr "'na.rm' 的参数是逻辑值,必须是 TRUE 或 FALSE" + +#: fmelt.c:677 +msgid "Argument 'variable.name' must be a character vector" +msgstr "'variable.name' 必须是字符串类型" + +#: fmelt.c:678 +msgid "Argument 'value.name' must be a character vector" +msgstr "'value.name' 必须是字符串类型" + +#: fmelt.c:679 +msgid "Argument 'verbose' should be logical TRUE/FALSE" +msgstr "'verbose' 的参数是逻辑值,必须是 TRUE 或 FALSE" + +#: fmelt.c:683 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "ncol(data)为0,返回原 data.table" + +#: fmelt.c:688 +msgid "names(data) is NULL. Please report to data.table-help" +msgstr "names(data)为NULL,请向 data.table-help 报告" + +#: forder.c:106 +#, c-format +msgid "Failed to realloc thread private group size buffer to %d*4bytes" +msgstr "无法将线程私有的组大小缓冲区重新分配为%d*4字节" + +#: forder.c:120 +#, c-format +msgid "Failed to realloc group size result to %d*4bytes" +msgstr "分配%d*4字节内存时失败。" + +#: forder.c:263 +#, c-format +msgid "" +"Logical error. counts[0]=%d in cradix but should have been decremented to 0. " +"radix=%d" +msgstr "逻辑错误:在 cradix 中的 counts[0] 应该为0,而不是%dradix=%d" + +#: forder.c:278 +msgid "Failed to alloc cradix_counts" +msgstr "分配 cradix_counts 失败" + +#: forder.c:280 +msgid "Failed to alloc cradix_tmp" +msgstr "分配 cradix_tmp 失败" + +#: forder.c:291 +#, c-format +msgid "" +"Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " +"ustr_alloc=%d" +msgstr "内部错误:开始运行 range_str 时,ustr 未清空:ustr_n=%d,ustr_alloc=%d" + +#: forder.c:292 +msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" +msgstr "内部错误:开始 range_str 时,ustr_maxlen 不是0" + +#: forder.c:312 +#, c-format +msgid "Unable to realloc %d * %d bytes in range_str" +msgstr "在 range_str 中,无法重新分配%d * %d字节" + +#: forder.c:330 +msgid "Failed to alloc ustr3 when converting strings to UTF8" +msgstr "将字符串转换为 UTF8 格式时,无法分配ustr3" + +#: forder.c:348 +msgid "Failed to alloc tl when converting strings to UTF8" +msgstr "将字符串转换为 UTF8 格式时,无法分配 tl" + +#: forder.c:377 +msgid "Must an integer or numeric vector length 1" +msgstr "必须是长度为1的整数或数字向量" + +#: forder.c:378 +msgid "Must be 2, 1 or 0" +msgstr "必须是2、1或者0" + +#: forder.c:412 +msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" +msgstr "未知的取值范围,不属于 NA, NaN, -Inf 或 +Inf" + +#: 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 "" +"内部错误:输入值是一个原子向量(而不是列表中的一列),但是'by' 的参数是列表而不" +"是NULL" + +#: forder.c:438 +msgid "" +"Input is an atomic vector (not a list of columns) but order= is not a length " +"1 integer" +msgstr "" +"输入值是一个原子向量(而不是列表中的一列),但参数 order不是长度为1的整数" + +#: forder.c:440 +#, c-format +msgid "forder.c received a vector type '%s' length %d\n" +msgstr "forder.c 接收到一个类型为'%s'长度为%d的向量\n" + +#: forder.c:448 +#, c-format +msgid "forder.c received %d rows and %d columns\n" +msgstr "forder.c 接收到%d行和%d列\n" + +#: forder.c:451 +msgid "Internal error: DT is an empty list() of 0 columns" +msgstr "内部错误:DT 是一个0列的空 list" + +#: forder.c:453 +#, c-format +msgid "" +"Internal error: DT has %d columns but 'by' is either not integer or is " +"length 0" +msgstr "内部错误:DT 内部有%d列,但参数 'by' 不是整数或长度为0" + +#: forder.c:455 +#, c-format +msgid "" +"Either order= is not integer or its length (%d) is different to by='s length " +"(%d)" +msgstr "参数 order 不是整数,或者它的长度(%d)与参数 'by' 指定的长度(%d)不同" + +#: forder.c:461 +#, c-format +msgid "internal error: 'by' value %d out of range [1,%d]" +msgstr "内部错误:参数 'by' 的值%d超出[1,%d]的范围" + +#: forder.c:463 +#, c-format +msgid "Column %d is length %d which differs from length of column 1 (%d)\n" +msgstr "列%d的长度是%d,与第1列的长度(%d)不同\n" + +#: forder.c:467 +msgid "retGrp must be TRUE or FALSE" +msgstr "retGrp 的参数是逻辑值,必须是 TRUE 或 FALSE" + +#: forder.c:470 +msgid "sort must be TRUE or FALSE" +msgstr " sort 的参数是逻辑值,必须是 TRUE 或 FALSE" + +#: forder.c:473 +msgid "At least one of retGrp= or sort= must be TRUE" +msgstr "retGrp 和sort 的参数中,至少一个必须是 TRUE" + +#: forder.c:475 +msgid "na.last must be logical TRUE, FALSE or NA of length 1" +msgstr "na.last 的参数必须是逻辑值 TRUE, FALSE 或 NA " + +#: forder.c:519 +#, c-format +msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." +msgstr "排序(ascending/descending)选项%d是%d,必须是+1 or -1" + +#: 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 "" +"\n" +"***传递给 forder 的%d列是一个没有小数的8字节 double 类型的日期数据,请考虑使" +"用4字节的整数日期(例如IDate)以节省空间和时间\n" + +#: forder.c:561 +#, c-format +msgid "Column %d passed to [f]order is type '%s', not yet supported." +msgstr "传递给 [f]order 的第%d列为 '%s'类型,目前尚不支持。" + +#: forder.c:714 +msgid "Internal error: column not supported, not caught earlier" +msgstr "内部错误:列有不支持类型,未被前置识别" + +#: forder.c:722 +#, c-format +msgid "nradix=%d\n" +msgstr "nradix=%d\n" + +#: forder.c:728 +#, c-format +msgid "" +"Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" +msgstr "分配TMP或UGRP失败或缓存行不一致: nth=%d" + +#: forder.c: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 "定时块 %2d%s = %8.3f %8d\n" + +#: forder.c:797 +#, c-format +msgid "stat[%03d]==%20\n" +msgstr "stat[%03d]==%20\n" + +#: forder.c:1053 +#, c-format +msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" +msgstr "分配并行计算失败,my_n=%d, nBatch=%d" + +#: forder.c:1162 +#, c-format +msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" +msgstr "无法分配TMP给并行批处理计算的 my_n=%d 项" + +#: forder.c:1269 +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 "" +"is.sorted (R层面)和 fsorted (C 层面)使用对象仅为向量。如果需要用于list或data." +"table,需要对其进行排序如果(length(o<-forder(...))),使用提高效率,或相当于" +"在 " + +#: forder.c:1301 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "类型 '%s' 目前不支持" + +#: forder.c:1310 +msgid "x must be either NULL or an integer vector" +msgstr "x 必须为空值或整型向量" + +#: forder.c:1312 +msgid "nrow must be integer vector length 1" +msgstr "nrow 必须为长度为1的整型向量" + +#: forder.c:1314 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "nrow==%d 但是必须 >=0" + +#: forder.c:1331 +msgid "x must be type 'double'" +msgstr "x 必须为浮点数类型" + +#: frank.c:11 +#, c-format +msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" +msgstr "内部错误:参数 'x' 关于 Cdt_na 是 '%s' 类型而不是 'list' 类型" + +#: frank.c:12 +#, c-format +msgid "Internal error. Argument 'cols' to Cdt_na is type '%s' not 'integer'" +msgstr "内部错误:参数 'cols' 关于 Cdt_na 是 '%s' 类型而不是 'integer' 类型" + +#: 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 "'cols' 的 %d 项为 %d ,超出1的范围 [1,ncol(x)=%d]" + +#: 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 "输入列表x的列 %d 长度为 %d,不同于第一列的该项长度为 %d" + +#: frank.c:65 frank.c:202 transpose.c:88 +#, c-format +msgid "Unsupported column type '%s'" +msgstr "不支持的列类型 '%s'" + +#: frank.c:83 +msgid "" +"Internal error: invalid ties.method for frankv(), should have been caught " +"before. please report to data.table issue tracker" +msgstr "" +"内部错误:对于 frankv()的无效值ties.method,应在之前被捕获。请报告给 data." +"table issue tracker" + +#: frank.c:130 +#, c-format +msgid "Internal error: unknown ties value in frank: %d" +msgstr "内部错误:frank中有未知的ties值 %d" + +#: frank.c:141 +#, c-format +msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" +msgstr "内部错误:参数 'x' 关于 CanyNA 是 '%s' 类型而不是'list'类型" + +#: frank.c:142 +#, c-format +msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" +msgstr "内部错误:参数 'cols' 关于 CanyNA 是 '%s' 类型而不是'integer'类型" + +#: fread.c:104 +#, c-format +msgid "" +"Internal error in line %d of fread.c, please report on data.table GitHub: " +msgstr "fread.c中%d行出现内部错误,请在 data.table 的 GitHub中提交报告:" + +#: fread.c:147 +#, c-format +msgid "System error %d unmapping view of file\n" +msgstr "系统错误 %d 取消映射文件视图\n" + +#: fread.c:150 +#, c-format +msgid "System errno %d unmapping file: %s\n" +msgstr "系统错误 %d 取消映射文件: %s\n" + +#: fread.c:210 +#, c-format +msgid "Internal error: NUMTYPE(%d) > nLetters(%d)" +msgstr "内部错误:NUMTYPE(%d) > nLetters(%d)" + +#: fread.c:435 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM. %s allocation." +msgstr "无法分配 %s 的连续虚拟内存。 %s 已分配。" + +#: fread.c:440 +#, c-format +msgid "Avoidable %.3f seconds. %s time to copy.\n" +msgstr "可避免的 %.3f 秒。 %s 复制用时\n" + +#: fread.c:441 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr "内存上的文件复制耗时 %.3f 秒\n" + +#: fread.c:1093 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "之前的会话fread()未正确清理。在当前 fread() 会话开始前清理好\n" + +#: fread.c:1096 +msgid "[01] Check arguments\n" +msgstr "[01] 参数检查\n" + +#: fread.c:1103 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr "使用 %d 线程 (omp_get_max_threads()=%d, nth=%d)\n" + +#: fread.c:1111 +msgid "" +"Internal error: NAstrings is itself NULL. When empty it should be pointer to " +"NULL." +msgstr "内部错误:NAstrings 自身为空值。当清空该项会指向NULL空值" + +#: fread.c:1129 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "freadMain: NAstring <<%s>> 在开始或者结束处有空白" + +#: fread.c:1134 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "freadMain: NAstring <<%s>> 被识别为布尔型,这是不允许" + +#: fread.c:1144 +msgid " No NAstrings provided.\n" +msgstr "未提供 NAstrings \n" + +#: fread.c:1146 +msgid " NAstrings = [" +msgstr " NAstrings = [" + +#: fread.c:1149 +msgid "]\n" +msgstr "]\n" + +#: fread.c:1151 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr "一个或多个 NAstrings 类似数值\n" + +#: fread.c:1153 +msgid " None of the NAstrings look like numbers.\n" +msgstr "没有 NAstrings 为数值\n" + +#: fread.c:1155 +#, c-format +msgid " skip num lines = %\n" +msgstr "跳过行数为 %\n" + +#: fread.c:1156 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr "跳转至 string = <<%s>>\n" + +#: fread.c:1157 +#, c-format +msgid " show progress = %d\n" +msgstr "显示进程 %d\n" + +#: fread.c:1158 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr " 0/1 列被读取为 %s\n" + +#: fread.c:1166 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "sep == quote ('%c') 不被允许" + +#: fread.c:1167 +msgid "dec='' not allowed. Should be '.' or ','" +msgstr "dec='' 不允许,应该为 '.' 或者 ','" + +#: fread.c:1168 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "sep == dec ('%c') 不允许" + +#: fread.c:1169 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "quote == dec ('%c') 不允许" + +#: fread.c:1186 +msgid "[02] Opening the file\n" +msgstr "[02] 打开文件\n" + +#: fread.c:1189 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "提供 `input` 参数而非文件名,理解为原始的文本读取\n" + +#: fread.c:1193 +msgid "Internal error: last byte of character input isn't \\0" +msgstr "内部错误:字符输入的最后一个字节不是 \\0" + +#: fread.c:1196 +#, c-format +msgid " Opening file %s\n" +msgstr "打开文件 %s\n" + +#: fread.c:1200 +#, c-format +msgid "file not found: %s" +msgstr "文件未找到: %s" + +#: fread.c:1204 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "文件能够打开但无法获知其大小:%s" + +#: fread.c:1207 fread.c:1235 +#, c-format +msgid "File is empty: %s" +msgstr "文件是空的:%s" + +#: fread.c:1208 fread.c:1236 +#, c-format +msgid " File opened, size = %s.\n" +msgstr "文件已打开,大小为 %s.\n" + +#: fread.c:1225 +#, c-format +msgid "File not found: %s" +msgstr "文件没有找到:%s" + +#: fread.c:1231 +#, c-format +msgid "Unable to open file after %d attempts (error %d): %s" +msgstr "经过 %d 次尝试后仍无法打开文件(错误 %d):%s" + +#: fread.c:1233 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "GetFileSizeEx 未能成功执行(返回值为0)于文件:%s" + +#: fread.c:1238 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %d for file %s" +msgstr "现在在Windows下,CreateFileMapping 返回错误 %d 于文件 %s" + +#: fread.c:1245 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "能够打开文件 %s 但不能创建内存映射。这是一个 %d 位进程。 %s." + +#: fread.c:1246 +msgid "Please upgrade to 64bit" +msgstr "请升级到64位" + +#: fread.c:1246 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "多半没有足够的连续虚拟内存" + +#: fread.c:1249 +msgid " Memory mapped ok\n" +msgstr " 内存映射正常\n" + +#: fread.c:1251 +msgid "" +"Internal error: Neither `input` nor `filename` are given, nothing to read." +msgstr "" +"内部错误:既没有`input`(输入)也没有`filename`(文件名),没有什么可供读入。" + +#: fread.c:1268 +msgid "[03] Detect and skip BOM\n" +msgstr "[03] 检测并跳过字节顺序标记(BOM)\n" + +#: fread.c:1272 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "在文件头发现了UTF-8 字节顺序标记(BOM)EF BB BF 并已跳过。\n" + +#: fread.c:1277 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "检测到GB-18030 编码,但fread() 未能解码。某些 字符字段可能有乱码。\n" + +#: fread.c:1280 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "文件编码是UTF-16,fread()不支持此编码。请 将文件转换为UTF-8。" + +#: fread.c:1285 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr " 发现输入的最后字节是 %s 并已去除。\n" + +#: fread.c:1288 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "输入是空的或只有字节顺序标记(BOM)或终端控制字符" + +#: fread.c:1295 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "[04] 设定mmap为 \\0 终止\n" + +#: fread.c:1302 +msgid "" +" No \\n exists in the file at all, so single \\r (if any) will be taken as " +"one line ending. This is unusual but will happen normally when there is no " +"\\r either; e.g. a single line missing its end of line.\n" +msgstr "" +" 文件中完全没有换行符\\n,所以单个 \\r(如果有的话)将被当成一行的结束。这不" +"太常见但如果没有\\r 的话属于正常;例如单个行没有行尾结束符。\n" + +#: fread.c:1303 +msgid "" +" \\n has been found in the input and different lines can end with different " +"line endings (e.g. mixed \\n and \\r\\n in one file). This is common and " +"ideal.\n" +msgstr "" +" 输入中有\\n 并且不同行可以有不同的 行尾结束符(如在一个文件中混合使用 \\n " +"和\\r\\n)。这很常见也是理想情况。\n" + +#: fread.c:1327 +#, c-format +msgid "" +" File ends abruptly with '%c'. Final end-of-line is missing. Using cow page " +"to write 0 to the last byte.\n" +msgstr "" +" 文件突然中止于 '%c'。没有最后一个行尾结束符。正使用写时复制页(cow, copy-" +"on-write)写入 0 到最后一个字节。\n" + +#: fread.c:1333 +msgid "" +"This file is very unusual: it ends abruptly without a final newline, and " +"also its size is a multiple of 4096 bytes. Please properly end the last row " +"with a newline using for example 'echo >> file' to avoid this " +msgstr "" +"这个文件非常不正常:它突然中止而没有最后的换行,并且其大小是4096 字节的整数" +"倍。请用一个换行(例如 'echo >> file')来恰当地结束最后一行以避免此错误" + +#: fread.c:1334 +#, c-format +msgid " File ends abruptly with '%c'. Copying file in RAM. %s copy.\n" +msgstr " 文件突然中止于 '%c'。正在从内存中复制文件。%s 复制。\n" + +#: fread.c:1368 +msgid "[05] Skipping initial rows if needed\n" +msgstr "[05] 如需要的话跳过起始行\n" + +#: fread.c:1374 +#, c-format +msgid "" +"skip='%s' not found in input (it is case sensitive and literal; i.e., no " +"patterns, wildcards or regex)" +msgstr "" +"在输入中没有发现 skip='%s' (这里大小写敏感并需要是字面形式,也就是说不能使用" +"模式,适配符或正则表达式)" + +#: fread.c:1380 +#, c-format +msgid "" +"Found skip='%s' on line %. Taking this to be header row or first row " +"of data.\n" +msgstr "在行 %2$ 发现了 skip='%1$s'。将此当做表头或数据的第一行。\n" + +#: fread.c:1393 +#, c-format +msgid " Skipped to line % in the file" +msgstr " 跳到文件的第 % 行" + +#: fread.c:1394 +#, c-format +msgid "skip=% but the input only has % line%s" +msgstr "skip=% 但输入只有 % 行 %s" + +#: fread.c:1403 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "输入是空,或全部为空白,或跳过设置是在最后一个非空白字符之后。" + +#: fread.c:1405 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr " 前移到第一个非空行 (%d)\n" + +#: fread.c:1406 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr " 定位到行 %d 开始于: <<%s>>\n" + +#: fread.c:1424 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "[06] 检测分隔符,引用规则,以及列数\n" + +#: fread.c:1428 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr " sep='\\n' 设定意味着将把所有行读作一个字符列\n" + +#: fread.c:1447 +msgid " Detecting sep automatically ...\n" +msgstr " 自动检测分隔符中 ...\n" + +#: fread.c:1454 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr " 使用提供的分隔符 '%s'\n" + +#: fread.c:1488 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr " 对 %d 个字段使用引用规则 %d\n" + +#: fread.c:1538 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr " 对 %d 行的 %d 字段使用引用规则 %d\n" + +#: fread.c:1545 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr " 没有分隔符并且引用规则发现了一个大于或等于2x2的区块。输入是单列。\n" + +#: fread.c:1561 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "单列输入包含了不合法的引用。自我修正只有在列数大于1(ncol>1)时才有效" + +#: fread.c:1566 +#, c-format +msgid "" +"Found and resolved improper quoting in first %d rows. If the fields are not " +"quoted (e.g. field separator does not appear within any field), try quote=" +"\"\" to avoid this warning." +msgstr "" +"在前 %d 行中发现并修正了不合适的引号用法。如果字段没有加引号(例如字段间隔符" +"没有在任何字段内出现),可以尝试使用 quote=\"\" 来避免此警告。" + +#: fread.c:1582 +#, c-format +msgid "" +"Internal error: ncol==%d line==%d after detecting sep, ncol and first line" +msgstr "内部错误:检测分隔符,列数和首行后,ncol==%d line==%d" + +#: fread.c:1585 +#, c-format +msgid "Internal error: first line has field count %d but expecting %d" +msgstr "内部错误:首行有%d个字段,但应该有%d个" + +#: fread.c:1587 +#, 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 "检测到第%2$d行有%1$d列。该行为列名或数据集首行。该行以<<%3$s>>开始\n" + +#: fread.c:1589 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr "标点符号规则 = %d\n" + +#: fread.c:1590 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr "fill=%s 且找到的最大列数为 %d\n" + +#: fread.c:1596 +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 "" +"该文件极为特殊,仅有一列数据,在结尾处包含多个行结束标记(表示多个空值),且" +"长度为4096的整数倍。" + +#: fread.c:1597 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr "正在将文件拷贝到RAM。%s\n" + +#: fread.c:1603 +msgid "" +" 1-column file ends with 2 or more end-of-line. Restoring last eol using " +"extra byte in cow page.\n" +msgstr "" +"该文件包含一列数据,存在多个行结束标记(表示多个空值)。正在使用写时复制页" +"(cow, copy-on-write)额外的字节恢复最后一个标记.\n" + +#: fread.c:1622 +msgid "" +"[07] Detect column types, good nrow estimate and whether first row is column " +"names\n" +msgstr "[07] 检测列类型,估计行数以及首行是否为列名\n" + +#: fread.c:1623 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr " 用户已将'header'(列名)从 'auto' 改为 %s\n" + +#: fread.c:1627 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "为 %2$s 类型分配 2 x %1$d bytes失败" + +#: fread.c:1648 +#, c-format +msgid " Number of sampling jump points = %d because " +msgstr "采样跳点数 = %d 因为" + +#: fread.c:1649 +#, c-format +msgid "nrow limit (%) supplied\n" +msgstr "指定了nrow 的最大值 (%) \n" + +#: fread.c:1650 +msgid "jump0size==0\n" +msgstr "jump0size==0\n" + +#: fread.c:1651 +#, c-format +msgid "" +"(% bytes from row 1 to eof) / (2 * % jump0size) == " +"%\n" +msgstr "" +"(从首行到结束共 % bytes) / (2 * % jump0size) == %\n" + +#: fread.c:1689 +#, c-format +msgid "" +" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. " +"%s\n" +msgstr "第%5$d个跳点所找到的第%4$d行,该行字段过于%1$s(%2$d/%3$d). %6$s\n" + +#: fread.c:1690 +msgid "few" +msgstr "少" + +#: fread.c:1690 +msgid "many" +msgstr "多" + +#: fread.c:1690 +msgid "" +"Most likely this jump landed awkwardly so type bumps here will be skipped." +msgstr "很有可能这一跳点的位置并不合适,因此此处的类型转换将被跳过。" + +#: fread.c:1716 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr " 类型码(跳点 %03d) : %s 引用规则 %d\n" + +#: fread.c:1729 +#, 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 "" +" 'header' 参数设为真,原因是第%1$d列首行包含字符串,并且在样本中的另外%3$d行" +"包含有较底层的数据类型(%2$s)\n" + +#: fread.c:1741 +msgid "" +"Internal error: row before first data row has the same number of fields but " +"we're not using it." +msgstr "内部错误:数据首行的前一行包含相同数量的字段但不会用到该行。" + +#: fread.c:1742 +msgid "" +"Internal error: ch!=pos after counting fields in the line before the first " +"data row." +msgstr "内部错误:对数据首行前一行的字段计数后,ch不等于pos" + +#: fread.c:1743 +#, 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 "" +"数据第一行的类型与第二行相匹配,但是之前的行有 %d 个字段。故将第一行数据的前" +"一行作为列名" + +#: fread.c:1746 +#, 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 "" +"检测到 %d 个列名,然而数据共有 %d 列(文件不合法)。添加了 %d 个额外列名%s\n" + +#: fread.c:1747 +msgid "" +" for the first column which is guessed to be row names or an index. Use " +"setnames() afterwards if this guess is not correct, or fix the file write " +"command that created the file to create a valid file." +msgstr "" +"作为第一列,并被用于猜测行名或索引。若上述猜测不正确,可在后续使用setnames()" +"进行修改,或修复用于生成该文件的文件写入命令以生成有效的文件。" + +#: fread.c:1747 +msgid "s at the end." +msgstr "到结尾处" + +#: fread.c:1749 +msgid "" +"Internal error: fill=true but there is a previous row which should already " +"have been filled." +msgstr "内部错误:参数fill=true,但是在此之前有一行应当已经被填充。" + +#: fread.c:1750 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns. Filling rows " +"automatically. Set fill=TRUE explicitly to avoid this warning.\n" +msgstr "" +"检测到%d个列名,但数据共有%d列。已经自动填充。设置参数fill=TRUE以屏蔽此警" +"告。\n" + +#: fread.c:1754 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "为 %2$s 类型重新分配 2 x %1$d bytes失败" + +#: fread.c:1774 +#, c-format +msgid "" +" 'header' determined to be %s because there are%s number fields in the " +"first and only row\n" +msgstr " 参数'header' 被设置为%s, 因为唯一的一行包含 %s 个字段\n" + +#: fread.c:1774 +msgid " no" +msgstr "0" + +#: fread.c:1777 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "参数 'header' 被设置为true,因为所有列类型均为字符串\n" + +#: fread.c:1779 +msgid "" +" 'header' determined to be false because there are some number columns and " +"those columns do not have a string field at the top of them\n" +msgstr "参数 'header' 被设置为false,因为部分字段的首行不为字符串\n" + +#: fread.c:1795 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr " 类型码(第一行) : %s 引用规则 %d\n" + +#: fread.c:1804 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=% " +"exactly\n" +msgstr " 文件太小,全部行均被采样到,所以 nrow=%\n" + +#: fread.c:1816 fread.c:1823 +msgid " =====\n" +msgstr " =====\n" + +#: fread.c:1817 +#, c-format +msgid "" +" Sampled % rows (handled \\n inside quoted fields) at %d jump " +"points\n" +msgstr " 已使用了 %2$d个跳点抽样 %1$ 行(处理了字段间的分隔符\\n)\n" + +#: fread.c:1818 +#, c-format +msgid "" +" Bytes from first data row on line %d to the end of last row: %\n" +msgstr " 从第一个数据行(%d)到最后一行的字节: %\n" + +#: fread.c:1819 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "文件每行长度的统计量:均值=%.2f,标准差=%.2f,最小值=%d ,最大值=%d\n" + +#: fread.c:1820 +#, c-format +msgid " Estimated number of rows: % / %.2f = %\n" +msgstr "估计数据共有 % / %.2f = % 行\n" + +#: fread.c:1821 +#, c-format +msgid "" +" Initial alloc = % rows (% + %d%%) using bytes/" +"max(mean-2*sd,min) clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" +"为 % 行 (% + %d%%)分配初始内存,大小为字节数/max(mean-2*sd," +"min),并确保该数值落于区间[1.1*estn, 2.0*estn]中\n" + +#: fread.c:1825 +#, c-format +msgid "Internal error: sampleLines(%) > allocnrow(%)" +msgstr "内部错误:sampleLines(%) > allocnrow(%)" + +#: fread.c:1829 +#, c-format +msgid " Alloc limited to lower nrows=% passed in.\n" +msgstr " 分配被限制在输入的更小的 nrows=% 值上。\n" + +#: fread.c:1841 +msgid "[08] Assign column names\n" +msgstr "[08] 指定列名\n" + +#: fread.c:1849 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "无法分配 %d*%d 字节给列名指针: %s" + +#: fread.c:1871 +#, c-format +msgid "Internal error: reading colnames ending on '%c'" +msgstr "内部错误:读取列名终止于 '%c'" + +#: fread.c:1889 +msgid "[09] Apply user overrides on column types\n" +msgstr "[09] 使用用户指定的列类型\n" + +#: fread.c:1893 +msgid " Cancelled by user: userOverride() returned false." +msgstr " 用户已取消:userOverride() 返回 false。" + +#: fread.c:1903 +#, c-format +msgid "Failed to allocate %d bytes for size array: %s" +msgstr "无法分配 %d 字节给 size 数组:%s" + +#: fread.c:1910 +#, 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 "" +"试图覆盖第 %d 列 <<%.*s>>,将内部类型 '%s' 降级为 '%s' 的操作被忽略。只支持将" +"列类型升为更高阶的类型。如果确定此操作,请完成之后再转换类型。" + +#: fread.c:1924 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr " 经过 %d 类型和 %d 丢弃用户覆盖:%s\n" + +#: fread.c:1932 +msgid "[10] Allocate memory for the datatable\n" +msgstr "[10] 分配内存给 datatable\n" + +#: fread.c:1933 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with % rows\n" +msgstr " 正在分配 %d 列位置(%d - %d 已丢弃),% 行\n" + +#: fread.c:1987 +#, c-format +msgid "Buffer size % is too large\n" +msgstr "缓冲长度 % 过大\n" + +#: fread.c:1990 +msgid "[11] Read the data\n" +msgstr "[11] 读取数据\n" + +#: fread.c:1993 +#, c-format +msgid " jumps=[%d..%d), chunk_size=%, total_size=%\n" +msgstr " jumps=[%d..%d),chunk_size=%,total_size=%\n" + +#: fread.c:2005 +#, c-format +msgid "Internal error: Master thread is not thread 0 but thread %d.\n" +msgstr "内部错误:主线程并非线程0而是线程%d\n" + +#: fread.c:2213 +#, c-format +msgid "" +"Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row " +"%\n" +msgstr "" +"第 %d 列(\"%.*s\") 发生了从 '%s' 到 '%s' 的类型转换,由于 <<%.*s>> 出现在第 " +"% 行\n" + +#: fread.c:2262 +#, c-format +msgid "" +"Internal error: invalid head position. jump=%d, headPos=%p, thisJumpStart=" +"%p, sof=%p" +msgstr "内部错误:head 位置无效。jump=%d, headPos=%p, thisJumpStart=%p, sof=%p" + +#: fread.c:2335 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional % rows (now nrows=" +"%) and continue reading from jump %d\n" +msgstr "" +" 分配的行数太少。正在分配额外的 % 行(当前 nrows=%),并从跳" +"跃 %d 继续读取\n" + +#: fread.c:2342 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr " 从跳跃 %d 重启组。nSwept==%d quoteRule==%d\n" + +#: fread.c:2362 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr " %d 样本外类型变更:%s\n" + +#: fread.c:2398 +#, c-format +msgid "" +"Read % rows x %d columns from %s file in %02d:%06.3f wall clock " +"time\n" +msgstr "读取 % 行 x %d 列,从 %s 文件(时钟时间 %02d:%06.3f)\n" + +#: fread.c:2405 +msgid "[12] Finalizing the datatable\n" +msgstr "[12] 最后定型 datatable\n" + +#: fread.c:2406 +msgid " Type counts:\n" +msgstr " 类型数量:\n" + +#: fread.c:2408 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "%10d : %-9s '%c'\n" + +#: fread.c:2424 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "丢弃末尾行:<<%s>>" + +#: fread.c:2429 +#, c-format +msgid "" +"Stopped early on line %. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" +"在第 % 行提前终止。预期有 %d 个字段但只找到 %d 个。可以考虑设置 " +"fill=TRUE 和 comment.char=。 首个丢弃的非空行:<<%s>>" + +#: fread.c:2435 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line " +"%: <<%s>>. If the fields are not quoted (e.g. field separator does " +"not appear within any field), try quote=\"\" to avoid this warning." +msgstr "" +"发现并修复了样本外的错误引号。首次在第 % 行修复:<<%s>>。如果这些字段" +"不在引号内(例如:字段间隔符没有在任何一个字段中出现),尝试用 quote=\"\" 来" +"避免该警告。" + +#: fread.c:2439 +msgid "=============================\n" +msgstr "=============================\n" + +#: fread.c:2441 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "%8.3fs (%3.0f%%) 内存映射 %.3fGB 文件\n" + +#: fread.c:2442 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "%8.3fs (%3.0f%%) sep=" + +#: fread.c:2444 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr " ncol=%d 和表头检测\n" + +#: fread.c:2445 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using % sample rows\n" +msgstr "%8.3fs (%3.0f%%) 列类型检测基于 % 个样本行\n" + +#: fread.c:2447 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of % rows x %d cols (%.3fGB) of which " +"% (%3.0f%%) rows used\n" +msgstr "" +"%8.3fs (%3.0f%%) % 行 x %d 列 (%.3fGB) 的分配中已使用 % " +"(%3.0f%%) 行\n" + +#: fread.c:2451 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) " +"using %d threads\n" +msgstr "" +"%8.3fs (%3.0f%%) 正在读取 %d 个块 (%d 已扫描) of %.3fMB (每个块 %d 行) 使用 " +"%d 个线程\n" + +#: fread.c:2453 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr " + %8.3fs (%3.0f%%) 解析到行处理线程的缓冲区(已增长 %d 次)\n" + +#: fread.c:2454 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr " + %8.3fs (%3.0f%%) 转置\n" + +#: fread.c:2455 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr " + %8.3fs (%3.0f%%) 正在等待\n" + +#: fread.c:2456 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "%8.3fs (%3.0f%%) 正在重读 %d 列,由于样本外类型异常\n" + +#: fread.c:2458 +#, c-format +msgid "%8.3fs Total\n" +msgstr "%8.3fs 总计\n" + +#: 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 输入的不是单个字符串:文件名或者数据文本。该错误本应在 R 中" +"被捕获。" + +#: freadR.c:92 +msgid "" +"Input contains a \\n or is \")\". Taking this to be text input (not a " +"filename)\n" +msgstr "输入中包含 \\n 或者是 \")\"。输入将被当做数据文本(而非文件名)\n" + +#: freadR.c:95 +msgid "Input contains no \\n. Taking this to be a filename to open\n" +msgstr "输入中不包含 \\n。输入将被当做文件名打开。\n" + +#: freadR.c:101 +msgid "" +"Internal error: freadR sep not a single character. R level catches this." +msgstr "内部错误:freadR sep 不是单个字符。R 中应该捕获此错误。" + +#: freadR.c:105 +msgid "" +"Internal error: freadR dec not a single character. R level catches this." +msgstr "内部错误:freadR dec 不是单个字符。R 中应该捕获此错误。" + +#: freadR.c:112 +msgid "quote= must be a single character, blank \"\", or FALSE" +msgstr "quote= 必须是单个字符,空白 \"\",或者 FALSE" + +#: freadR.c:137 +msgid "Internal error: skip not integer or string in freadR.c" +msgstr "内部错误:freadR.c 中 skip 非整数或字符串" + +#: freadR.c:140 +#, c-format +msgid "Internal error: NAstringsArg is type '%s'. R level catches this" +msgstr "内部错误:NAstringsArg是'%s'数据类型.R中能够捕获这个信息" + +#: freadR.c:153 +#, c-format +msgid "nThread(%d)<1" +msgstr "nThread(%1$d)<1(线程数(%1$d)小于1)" + +#: freadR.c:160 +msgid "'integer64' must be a single character string" +msgstr "'64整数型'必须是单个字符串" + +#: freadR.c:168 +#, c-format +msgid "" +"Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or " +"'numeric'" +msgstr "" +"64位整数型有效值='%s'.必须是'64位整数型','字符串','双精度浮点型'或者'数值" +"型'" + +#: freadR.c:176 +msgid "Use either select= or drop= but not both." +msgstr "select=和drop=不可同时使用" + +#: freadR.c:179 +msgid "" +"select= is type list for specifying types in select=, but colClasses= has " +"been provided as well. Please remove colClasses=." +msgstr "" +"select=是用于在select=中指定类型的类型列表,但是还提供了colClasses=。请删除" +"colClasses=。" + +#: freadR.c:181 +msgid "" +"select= is type list but has no names; expecting list(type1=cols1, " +"type2=cols2, ...)" +msgstr "" +"select =是类型列表,但没有名称; 期望列表(type1 = cols1,type2 = " +"cols2,...)" + +#: 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 "" +"select =是一个命名向量,用于指定要选择的列及其类型,但是还提供了colClasses " +"=。 请删除colClasses =。" + +#: freadR.c:196 freadR.c:346 +msgid "colClasses is type list but has no names" +msgstr "colClasses是类型列表,但没有名称" + +#: freadR.c:206 +#, c-format +msgid "encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'" +msgstr "encoding ='%s'无效。 必须为'未知','Latin-1'或'UTF-8'" + +#: freadR.c:229 +#, c-format +msgid "Column name '%s' (%s) not found" +msgstr "找不到列名'%s'(%s)" + +#: freadR.c:231 +#, c-format +msgid "%s is NA" +msgstr "%s是缺失值" + +#: freadR.c:233 +#, c-format +msgid "%s is %d which is out of range [1,ncol=%d]" +msgstr "%s是%d,超出范围[1,ncol =%d]" + +#: freadR.c:247 +msgid "Internal error: typeSize[CT_BOOL8_N] != 1" +msgstr "内部错误:类型大小[CT_BOOL8_N]不等于1" + +#: freadR.c:248 +msgid "Internal error: typeSize[CT_STRING] != 1" +msgstr "内部错误:类型大小[CT_STRING]不等于1" + +#: freadR.c:282 +#, c-format +msgid "" +"Column name '%s' not found in column name header (case sensitive), skipping." +msgstr "在列名标题中找不到列名'%s'(区分大小写),正在跳过。" + +#: 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 "" +"列号%d(select [%d])为负,但应在[1,ncol =%d]范围内。考虑drop=用于排除列。" + +#: 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 "" +"select=0(select[%d])没有意义。select的所有值都应在[1,ncol=%d]范围内。" + +#: freadR.c:294 +#, c-format +msgid "" +"Column number %d (select[%d]) is too large for this table, which only has %d " +"columns." +msgstr "对于此表(仅包含%d列,)列号%d(select [%d])太大。" + +#: freadR.c:295 +#, c-format +msgid "Column number %d ('%s') has been selected twice by select=" +msgstr "列号%d('%s')已由select =选择两次" + +#: freadR.c:313 +msgid "" +"colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing" +msgstr "colClasses ='NULL'是不允许的; 即删除所有列而不加载任何内容" + +#: 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 "" +"colClasses =是类型为%d的类型的未命名向量,但是有%d输入中的列。要为列的子集指" +"定类型,可以使用命名向量,列表格式或使用select=而不是colClasses=。请参阅'?" +"fread'中的示例。" + +#: freadR.c:329 +msgid "Internal error: selectInts is NULL but selectColClasses is true" +msgstr "内部错误:selectInts为NULL,但selectColClasses为true" + +#: freadR.c:330 +msgid "" +"Internal error: length(selectSxp)!=length(colClassesSxp) but " +"selectColClasses is true" +msgstr "" +"内部错误:length(select xp)!=length(colClasses xp),但select ColClasses" +"为true" + +#: freadR.c:344 +#, c-format +msgid "colClasses is type '%s' but should be list or character" +msgstr "colClasses是类型'%s',但应该是列表或字符" + +#: freadR.c:368 +#, c-format +msgid "Column name '%s' (colClasses[[%d]][%d]) not found" +msgstr "找不到列名'%s'(colClasses[[%d]][%d])" + +#: freadR.c:370 +#, c-format +msgid "colClasses[[%d]][%d] is NA" +msgstr "colClasses[[%d]][%d]是NA" + +#: freadR.c:374 +#, c-format +msgid "" +"Column %d ('%s') appears more than once in colClasses. The second time is " +"colClasses[[%d]][%d]." +msgstr "" +"Column %d ('%s')在colClasses中出现了多次。第二次是colClasses[[%d]][%d]." + +#: freadR.c:381 +#, c-format +msgid "Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]" +msgstr "列号%d(colClasses[[%d]][%d])超出范围[1,ncol=%d]" + +#: freadR.c:583 +#, c-format +msgid "Field size is 1 but the field is of type %d\n" +msgstr "字段大小为1,但字段类型为%d \n" + +#: freadR.c:592 +#, c-format +msgid "Internal error: unexpected field of size %d\n" +msgstr "内部错误:大小为%d 的意外字段\n" + +#: freadR.c:660 +#, c-format +msgid "%s" +msgstr "%s" + +#: froll.c:14 froll.c:223 froll.c:407 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "%s:窗口宽度比输入向量长,返回所有NA向量\n" + +#: froll.c:32 froll.c:240 froll.c:456 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "%s:对齐%d,将答案移位%d\n" + +#: froll.c:39 froll.c:247 frolladaptive.c:19 frolladaptive.c:214 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "%s: 处理算法%u用了%.3fs\n" + +#: froll.c:48 froll.c:251 +#, c-format +msgid "%s: running for input length %, window %d, hasna %d, narm %d\n" +msgstr "" +"%s: 正在并行运行, 输入长度 (input length) %, 窗口 (window) %d, hasna " +"%d, narm %d\n" + +#: froll.c:68 froll.c:78 froll.c:169 froll.c:271 froll.c:281 froll.c:362 +#: frolladaptive.c:58 frolladaptive.c:147 frolladaptive.c:247 +#: frolladaptive.c:326 +#, c-format +msgid "" +"%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in " +"input, use default hasNA=NA to avoid this warning" +msgstr "" +"%s:使用了hasNA = FALSE,但输入中存在NA(或其他非限定性)值,请使用默认的" +"hasNA=NA以避免此警告" + +#: froll.c:71 froll.c:173 froll.c:274 froll.c:366 frolladaptive.c:61 +#: frolladaptive.c:151 frolladaptive.c:250 frolladaptive.c:330 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "%s:输入中存在NA(或非限定值),请格外注意NA值并重新运行\n" + +#: froll.c:81 froll.c:284 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, skip non-NA " +"attempt and run with extra care for NAs\n" +msgstr "%s: NA (或其他非有限长度值) 出现在输入中, 跳过非NA的输入并当心NA值\n" + +#: froll.c:137 froll.c:335 +#, c-format +msgid "" +"%s: running in parallel for input length %, window %d, hasna %d, " +"narm %d\n" +msgstr "" +"%s: 正在并行运行, 输入长度 (input length) %, 窗口 (window) %d, hasna " +"%d, narm %d\n" + +#: froll.c:175 froll.c:368 frolladaptive.c:153 frolladaptive.c:332 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE " +"so in 'exact' implementation NAs were handled already, no need to re-run\n" +msgstr "" +"%s: NA (或其他非有限长度值) 出现在输入中, na.rm 为 FALSE 因此在'exact'实现" +"中, NA值已经被处理, 不需要重新运行\n" + +#: froll.c:424 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "%s: 所提供的函数 (FUN) 的结果长度不为1" + +#: froll.c:431 +#, c-format +msgid "" +"%s: results from provided FUN are not of type double, coercion from integer " +"or logical will be applied on each iteration\n" +msgstr "" +"%s: 所提供的函数 (FUN) 的结果不是双精度 (double) 类型, 对整数或逻辑值的类型转" +"换会在每个循环中执行\n" + +#: froll.c:434 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "%s: 所提供的函数 (FUN) 的结果不是双精度 (double) 类型" + +#: froll.c:463 +#, c-format +msgid "%s: took %.3fs\n" +msgstr "%s: 使用了 %.3fs\n" + +#: frollR.c:15 +msgid "x must be of type numeric or logical" +msgstr "x 必须是数值或者逻辑类型" + +#: frollR.c:26 +msgid "x must be list, data.frame or data.table of numeric or logical types" +msgstr "" +"x 必须是列表 (list), 或由数值或者逻辑类型组成的数据框 (data.frame 或 data." +"table)" + +#: frollR.c:47 frollR.c:264 +msgid "n must be non 0 length" +msgstr "n 必须不是0长度" + +#: frollR.c:50 +msgid "adaptive must be TRUE or FALSE" +msgstr "adaptive 必须是 TRUE 或者 FALSE" + +#: frollR.c:58 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "n 必须是整数, 或者当adaptive TRUE时也可以是列表" + +#: frollR.c:65 frollR.c:256 frollR.c:259 +msgid "n must be integer" +msgstr "n 必须是整数" + +#: frollR.c:72 +msgid "n must be positive integer values (> 0)" +msgstr "n 必须是正整数 (> 0)" + +#: frollR.c:81 frollR.c:93 +msgid "n must be integer vector or list of integer vectors" +msgstr "n 必须是整数向量 或者由整数向量组成的列表" + +#: 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 "na.rm 必须是 TRUE 或者 FALSE" + +#: frollR.c:107 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "hasNA 必须是 TRUE, FALSE 或者 NA" + +#: 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 "" +"同时使用 hasNA FALSE 和 na.rm TRUE 没有意义, 如果明确有NA值, 那就用 hasNA " +"TRUE, 在其他情况可以让它保留默认值NA" + +#: 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 "" +"内部错误: 在 rolling 函数内无效的 align 参数, 理应在更早阶段排除请向data." +"table issue tracker报告" + +#: frollR.c:122 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "同时使用 adaptive TRUE 和不是 'right' 的align参数还未能实现" + +#: frollR.c:126 frollR.c:297 types.c:64 +#, c-format +msgid "%s: allocating memory for results %dx%d\n" +msgstr "%s: 正在为结果 %dx%d 分配内存\n" + +#: 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 "" +"adaptive rolling 函数只能处理长度同为的 'x', 比如 data.table 或数据框; 如果想" +"在含有不同长度元素的列表上执行 rolling函数, 需要分开单独地在每一项上面执行." + +#: 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 "'n' 列表中整数向量的长度必须等于 'x' 中的观察数量" + +#: 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 "" +"内部错误: 在 rolling 函数中无效的 fun 参数, 理应在更早阶段排除请向data.table " +"issue tracker报告" + +#: frollR.c:155 frollR.c:279 nafill.c:152 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "fill 必须是长度为1的向量" + +#: frollR.c:169 frollR.c:292 +msgid "fill must be numeric" +msgstr "fill 必须是数值型" + +#: 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 "" +"内部错误: 在 rolling 函数内无效的 algo 参数, 理应在更早阶段排除请向data." +"table issue tracker报告" + +#: frollR.c:190 +#, c-format +msgid "Internal error: badaptive=%d but ik is not integer" +msgstr "内部错误: badaptive=%d 但是 ik 不是整数" + +#: frollR.c:198 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), if product > 1 then entering parallel " +"execution\n" +msgstr "%s: %d column(s) 和 %d window(s), 如果 product > 1 则进入并行执行\n" + +#: 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 "" +"%s: %d column(s) 和 %d window(s), 未能进入并行执行,因为 algo='exact' 会并行计" +"算结果\n" + +#: frollR.c:219 +#, c-format +msgid "Internal error: Unknown sfun value in froll: %d" +msgstr "内部错误: 在 froll: %d 中未知的 sfun 值" + +#: frollR.c:227 frollR.c:329 +#, c-format +msgid "%s: processing of %d column(s) and %d window(s) took %.3fs\n" +msgstr "%s: 处理 %d column(s), 和 %d window(s) 用掉 %.3fs\n" + +#: frollR.c:238 +msgid "internal error: 'fun' must be a function" +msgstr "内部错误: 'fun' 必须是一个函数" + +#: frollR.c:240 +msgid "internal error: 'rho' should be an environment" +msgstr "内部错误: 'rho' 应该为一个环境 (environment)" + +#: frolladaptive.c:29 frolladaptive.c:218 +#, c-format +msgid "%s: running for input length %, hasna %d, narm %d\n" +msgstr "%s: 正在运行, 输入长度 %, hasna %d, narm %d\n" + +#: frolladaptive.c:35 frolladaptive.c:224 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "%s: 无法为 cumsum 分配内存" + +#: frolladaptive.c:71 frolladaptive.c:260 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "%s: 无法为 cum NA counter 分配内存" + +#: frolladaptive.c:114 frolladaptive.c:298 +#, c-format +msgid "%s: running in parallel for input length %, hasna %d, narm %d\n" +msgstr "%s: 正在并行运行, 输入长度 %, hasna %d, narm %d\n" + +#: fsort.c:111 +msgid "x must be a vector of type 'double' currently" +msgstr "x 目前必须是双精度 ('double') 类型的向量" + +#: fsort.c:122 +#, c-format +msgid "nth=%d, nBatch=%d\n" +msgstr "nth=%d, nBatch=%d\n" + +#: fsort.c:156 +#, c-format +msgid "Range = [%g,%g]\n" +msgstr "Range = [%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=%, lastBatchSize=" +"%)\n" +msgstr "" +"counts为%dMB (每个nBatch中的%d页=%d, batchSize=%, lastBatchSize=" +"%)\n" + +#: fsort.c:231 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +msgstr "内部错误:counts[nBatch-1][MSBsize-1] != length(x)" + +#: fsort.c:247 +msgid "Top 5 MSB counts: " +msgstr "前5个MSB counts:" + +#: fsort.c:247 +#, c-format +msgid "% " +msgstr "% " + +#: fsort.c:247 fwrite.c:702 fwrite.c:966 +msgid "\n" +msgstr "\n" + +#: fsort.c:248 +#, c-format +msgid "Reduced MSBsize from %d to " +msgstr "MSBsize 从 %d 减少到" + +#: fsort.c:252 +#, c-format +msgid "%d by excluding 0 and 1 counts\n" +msgstr "%d 通过排除0和1的counts\n" + +#: fsort.c:309 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" +msgstr "%d: %.3f (%4.1f%%)\n" + +#: fwrite.c:613 +#, c-format +msgid "buffMB=%d outside [1,1024]" +msgstr "buffMB=%d 在[1,1024]之外" + +#: fwrite.c:620 +#, 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)但是长度为%d" + +#: fwrite.c:623 +msgid "Column writers: " +msgstr "数据写入: " + +#: fwrite.c:625 fwrite.c:627 fwrite.c:629 +#, c-format +msgid "%d " +msgstr "%d " + +#: fwrite.c:628 +msgid "... " +msgstr "... " + +#: fwrite.c:631 +#, c-format +msgid "" +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=% args.ncol=" +"%d eolLen=%d\n" +msgstr "" +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=% args.ncol=" +"%d eolLen=%d\n" + +#: fwrite.c:664 +#, c-format +msgid "Internal error: type %d has no max length method implemented" +msgstr "内部错误:%d type 没有实施最大长度的方法" + +#: fwrite.c:671 +#, c-format +msgid "maxLineLen=%. Found in %.3fs\n" +msgstr "maxLineLen=%. 在%.3fs中发现\n" + +#: fwrite.c:691 +#, 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:692 +#, 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:700 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " +msgstr "正在写入bom (%s), yaml (%d characters) 和 column names (%s) ..." + +#: fwrite.c:713 +#, c-format +msgid "Unable to allocate %d MiB for header: %s" +msgstr "无法为header: %2$s分配%1$d MiB" + +#: fwrite.c:741 fwrite.c:803 +msgid "Can't allocate gzip stream structure" +msgstr "无法分配gzip的流结构" + +#: fwrite.c:748 +#, c-format +msgid "Unable to allocate %d MiB for zbuffer: %s" +msgstr "无法为zbuffer: %2$s分配%1$d MiB" + +#: fwrite.c:764 +#, c-format +msgid "Compress gzip error: %d" +msgstr "解压gzip错误: %d" + +#: fwrite.c:765 fwrite.c:773 fwrite.c:972 +#, c-format +msgid "%s: '%s'" +msgstr "%s: '%s'" + +#: fwrite.c:770 +#, c-format +msgid "done in %.3fs\n" +msgstr "%.3fs完成\n" + +#: fwrite.c:772 +msgid "No data rows present (nrow==0)\n" +msgstr "当前没有数据行(nrow==0)\n" + +#: fwrite.c:790 +#, c-format +msgid "" +"Writing % rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d)\n" +msgstr "" +"正在%3$d行的%2$d批处理中写入%1$行(每个缓存的大小为%4$dMB," +"showProgress=%5$d, nth=%6$d)\n" +")\n" + +#: fwrite.c:980 +#, c-format +msgid "" +"zlib %s (zlib.h %s) deflate() returned error %d with z_stream->msg==\"%s\" " +"Z_FINISH=%d Z_BLOCK=%d. %s" +msgstr "" +"zlib %s (zlib.h %s) deflate() 返回了错误%d跟错误 z_stream->msg==\"%s\" " +"Z_FINISH=%d Z_BLOCK=%d . %s" + +#: fwrite.c:982 +msgid "" +"Please include the full output above and below this message in your data." +"table bug report." +msgstr "请将此消息上方和下方的全部输出结果一起提交到data.table的bug report中" + +#: fwrite.c:983 +msgid "" +"Please retry fwrite() with verbose=TRUE and include the full output with " +"your data.table bug report." +msgstr "" +"请使用verbose=TRUE重试fwrite(),并将完整的输出提交到data.table的bug report中" + +#: 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',由于%3$d列是列表页 (list-column is a data frame " +"that host lists),所有包含sep('%1$c') 或 sep2 ('%2$c')的字段将会被自动加上引" +"号。\n" + +#: 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 gsumm.c:46 gsumm.c:47 +#, c-format +msgid "%s is not an integer vector" +msgstr "%s不是整数向量" + +#: 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 "length(f)=%d != length(l)=%d" + +#: 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 "%.3fs\n" + +#: 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 gsumm.c:693 gsumm.c:812 gsumm.c:955 gsumm.c:1005 +#: gsumm.c:1085 gsumm.c:1176 gsumm.c:1266 gsumm.c:1409 +#, c-format +msgid "nrow [%d] != length(x) [%d] in %s" +msgstr "%3$s 中 nrow [%1$d] != length(x) [%2$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 "" +"某整数列分组求和的结果中,出现了超过了整型(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: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 "" +"GForce的max函数只能在应用在数据列上,而不能在.SD或者其他对象上。为了找到某个" +"list(如.SD)里所有元素的最大值,请使用 base::max(.SD) 或者通过设置 " +"options(datatable.optimize=1) 来关掉GForce优化。更有可能的是,你真正想要使用" +"的命令是 'DT[,lapply(.SD,max),by=,.SDcols=]'" + +#: gsumm.c:807 +msgid "max is not meaningful for factors." +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 "" +"至少有一个子集的值全为缺失值。为保持和base包一致,对这种情况将会返回'-Inf'" + +#: gsumm.c:937 +msgid "Type 'complex' has no well-defined max" +msgstr "类型'complex'没有明确定义的最大值" + +#: 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 "" +"GForce的max (gmax)函数不支持类型 '%s'。请使用 base::max(.) 或者设置 " +"options(datatable.optimize=1) 来关掉GForce优化" + +#: 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 "" +"GForce的median函数只能在应用在数据列上,而不能在.SD或者其他对象上。为了找到某" +"个list(如.SD)里所有元素的最大值,请使用 stats::median(.SD) 或者通过设置 " +"options(datatable.optimize=1) 来关掉GForce优化。更有可能的是,你真正想要使用" +"的命令是 'DT[,lapply(.SD,median),by=,.SDcols=]'" + +#: gsumm.c:952 +msgid "median is not meaningful for factors." +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 "" +"GForce函数median (gmedian)不支持类型'%s'。请使用 stats::tail(.) 或者设置 " +"options(datatable.optimize=1) 来关掉GForce优化。" + +#: 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 "" +"GForce函数tail (gtail)不支持类型'%s'。请使用 utils::tail(.) 或者设置 " +"options(datatable.optimize=1) 来关掉GForce优化。" + +#: 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 "" +"GForce函数head (ghead)不支持类型'%s'。请使用 utils::head(.) 或者设置 " +"options(datatable.optimize=1) 来关掉GForce优化。" + +#: 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 "内部错误:gtail仅能应用于n=1的情况。此错误理应已被处理。请在 data.table 的 GitHub中提交报告。" + +#: 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 "内部错误:ghead仅能应用于n=1的情况。此错误理应已被处理。请在 data.table 的 GitHub中提交报告。" + +#: 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 "内部错误:`g[` (gnthvalue) 仅能用于采用单个正数索引求取子集,如 .SD[2]。此错误理应已被处理。请在 data.table 的 GitHub中提交报告。" + +#: 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 "GForce取子集运算符`[` (gnthvalue)尚不支持'%s'类型。。请添加前缀stats::var(.),或使用options(datatable.optimize=1) 关闭 GForce优化" + +#: 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 "GForce var/sd 仅能应用于列,而非.SD或其他。若要求取某一列表,如.SD,所有元素的全协方差矩阵,请添加前缀stats::var(.SD)(或stats::sd(.SD)),或使用options(datatable.optimize=1) 关闭 GForce优化。另外,若仅需获得对角线元素,最佳的方式是使用'DT[,lapply(.SD,var),by=,.SDcols=]'。" + +#: gsumm.c:1263 +msgid "var/sd is not meaningful for factors." +msgstr "无法对因子类型使用 var/sd。" + +#: 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 "GForce var (gvar) 尚不支持 '%s'类型。请添加前缀stats::var(.),或使用options(datatable.optimize=1) 关闭 GForce优化" + +#: 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 "" +"GForce sd (gsd)不支持类型'%s',要么添加前缀 stats::sd(.),要么使用选项" +"datatable.optimize=1来关闭GForce优化。" + +#: 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 "" +"GForce prod只能应用于列,而不能应用于.SD或其他类似格式的。为了在列表如.SD相乘" +"所有的元素,要么添加前缀base::prod(.SD), 要么使用选项datatable.optimize=1来关" +"闭GForce优化。你可以试试'DT[,lapply(.SD,prod),by=,.SDcols=]'" + +#: gsumm.c:1404 +msgid "prod is not meaningful for factors." +msgstr "prod对于因子是没有意义的" + +#: gsumm.c:1411 +#, c-format +msgid "Unable to allocate %d * %d bytes for gprod" +msgstr "无法给gprod分配%d * %d 字节" + +#: 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 "" +"GForce prod (gprod)不支持类型'%s',要么添加前缀 base::prod(.),要么使用选项" +"datatable.optimize=1来关闭GForce优化。" + +#: 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 "" +"内部错误:'mult'的值无效;这应该在之前被找到。请报告给data.table问题跟踪器" + +#: 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 "" +"内部错误:'type'的值无效;这应该在之前被找到。请报告给data.table问题跟踪器" + +#: ijoin.c:56 ijoin.c:121 +#, c-format +msgid "Internal error: unknown type in mult=%d in lookup: %d" +msgstr "内部错误:在查找的过程中,mult=%d出现未知的类型:%d" + +#: ijoin.c:124 ijoin.c:215 +#, c-format +msgid "Internal error: unknown mult in lookup: %d" +msgstr "内部错误:在查找中出现未知的mult:%d" + +#: ijoin.c:128 +#, c-format +msgid "First pass on calculating lengths in lookup ... done in %8.3f seconds\n" +msgstr "查找的第一步:长度计算...在%8.3f秒内完成\n" + +#: ijoin.c:141 +#, c-format +msgid "Second pass on allocation in lookup ... done in %8.3f seconds\n" +msgstr "查找的第二步:分配...在%8.3f秒内完成\n" + +#: ijoin.c:160 +#, c-format +msgid "Internal error: unknown type lookup should have been caught earlier: %d" +msgstr "内部错误:未知类型查找应该被更早找到:%d" + +#: ijoin.c:212 +#, c-format +msgid "" +"Internal error: unknown type in mult=%d in lookup should have been caught " +"earlier: %d" +msgstr "内部错误:在在查找的过程中,mult=%d出现未知的类型应该被更早找到:%d" + +#: ijoin.c:220 +#, c-format +msgid "Final step in generating lookup ... done in %8.3f seconds\n" +msgstr "查找的最后一步:生成结果...在在%8.3f秒内完成\n" + +#: ijoin.c:323 +#, c-format +msgid "Internal error: unknown type in mult=ALL in overlaps: %d" +msgstr "内部错误:在重叠的过程中,mult=ALL出现未知类型:%d" + +#: ijoin.c:328 +#, c-format +msgid "" +"First pass on calculating lengths in overlaps ... done in %8.3f seconds\n" +msgstr "重叠的第一步:长度计算...在%8.3f秒内完成\n" + +#: ijoin.c:464 ijoin.c:571 ijoin.c:720 +#, c-format +msgid "Internal error: unknown type in mult=%d in overlaps: %d" +msgstr "内部错误:在重叠的过程中,mult=%d出现未知类型:%d" + +#: ijoin.c:723 +#, c-format +msgid "Internal error: unknown mult in overlaps: %d" +msgstr "内部错误:在重叠中出现未知的mult:%d" + +#: ijoin.c:727 +#, c-format +msgid "Final step, fetching indices in overlaps ... done in %8.3f seconds\n" +msgstr "重叠的最后一步:获取索引...在%8.3f秒内完成\n" + +#: init.c:233 +#, c-format +msgid "" +"Pointers are %d bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "指针是%d个字节,大于8。我们尚未在大于64位的任何体系结构上进行测试。" + +#: init.c:247 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "检查NA_INTEGER [%d] == INT_MIN [%d] %s" + +#: init.c:248 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "检查Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" + +#: init.c:249 +#, c-format +msgid "Checking sizeof(int) [%d] is 4 %s" +msgstr "检查sizeof(int)[%d]是否为4 %s" + +#: init.c:250 +#, c-format +msgid "Checking sizeof(double) [%d] is 8 %s" +msgstr "检查 sizeof(double) [%d]是否为8 %s" + +#: init.c:252 +#, c-format +msgid "Checking sizeof(long long) [%d] is 8 %s" +msgstr "检查sizeof(long long) [%d]是否为8 %s" + +#: init.c:253 +#, c-format +msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" +msgstr "检查sizeof(pointer) [%d]是否为4 或者 8 %s" + +#: init.c:254 +#, c-format +msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" +msgstr "检查sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" + +#: init.c:255 +#, c-format +msgid "Checking sizeof(uint64_t) [%d] is 8 %s" +msgstr "检查 sizeof(uint64_t) [%d]是否为8 %s" + +#: init.c:256 +#, c-format +msgid "Checking sizeof(int64_t) [%d] is 8 %s" +msgstr "检查sizeof(int64_t) [%d]是否为8 %s" + +#: init.c:257 +#, c-format +msgid "Checking sizeof(signed char) [%d] is 1 %s" +msgstr "检查sizeof(signed char) [%d]是否为1 %s" + +#: init.c:258 +#, c-format +msgid "Checking sizeof(int8_t) [%d] is 1 %s" +msgstr "检查sizeof(int8_t) [%d]是否为1 %s" + +#: init.c:259 +#, c-format +msgid "Checking sizeof(uint8_t) [%d] is 1 %s" +msgstr "检查sizeof(uint8_t) [%d]是否为1 %s" + +#: init.c:260 +#, c-format +msgid "Checking sizeof(int16_t) [%d] is 2 %s" +msgstr "检查sizeof(int16_t) [%d]是否为2 %s" + +#: init.c:261 +#, c-format +msgid "Checking sizeof(uint16_t) [%d] is 2 %s" +msgstr "检查sizeof(uint16_t) [%d]是否为2 %s" + +#: init.c:264 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "检查LENGTH(allocVector(INTSXP,2)) [%d]是否为2 %s" + +#: init.c:265 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" +msgstr "检查TRUELENGTH(allocVector(INTSXP,2)) [%d]是否为0 %s" + +#: init.c:272 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "检查memset(&i,0,sizeof(int)); i == (int)0 %s" + +#: init.c:275 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "检查memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" + +#: init.c:278 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "检查memset(&d, 0, sizeof(double)); d == (double)0.0 %s" + +#: init.c:281 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "检查memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" + +#: init.c:284 +msgid "The ascii character '/' is not just before '0'" +msgstr "ASCII 字符 '/' 后一个字符并非字符 '0'" + +#: init.c:285 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "C表达式 (uint_fast8_t)('/'-'0') <10 为 true. 应该是 false." + +#: init.c:286 +msgid "The ascii character ':' is not just after '9'" +msgstr "ascii字符':'不是在'9'后" + +#: init.c:287 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "C表达式(uint_fast8_t)('9'-':') < 10 为 true. 应该是 false." + +#: init.c:292 +#, c-format +msgid "Conversion of NA_INT64 via double failed %!=%" +msgstr "double类型转化为NA_INT64失败,%!=%" + +#: init.c:296 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "NA_INT64_D (negative -0.0) 不是 == 0.0." + +#: init.c:297 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "NA_INT64_D (negative -0.0) 不是 ==-0.0." + +#: init.c:298 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "ISNAN(NA_INT64_D) 不应该是TRUE" + +#: init.c:299 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "isnan(NA_INT64_D) 不应该是 TRUE" + +#: init.c:328 +#, c-format +msgid "PRINTNAME(install(\"integer64\")) has returned %s not %s" +msgstr "PRINTNAME(install(\"integer64\")) 返回了 %s , 而不是 %s" + +#: init.c:397 +msgid ".Last.value in namespace is not a length 1 integer" +msgstr "命名空间中,.Last.value 不是一个长度为 1 的整型" + +#: nafill.c:99 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "参数'x'是一个原子型矢量,原位的更新只为list 或 data.table提供" + +#: nafill.c:101 nafill.c:111 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "参数'x'必须是数字类型,或者是数字类型的list/data.table" + +#: nafill.c:149 nafill.c:180 +msgid "" +"Internal error: invalid type argument in nafillR function, should have been " +"caught before. Please report to data.table issue tracker." +msgstr "" +"内部错误:函数 nafillR 中有无效类型的参数, 该错误理应已被捕获,请向data.table" +"的issue通道报告" + +#: nafill.c:196 +#, c-format +msgid "%s: parallel processing of %d column(s) took %.3fs\n" +msgstr "%s : 并行处理 %d 列, 用时 %.3fs\n" + +#: 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 "" +"忽略无效的 %s==\")%s\". 不是一个 >= 1 的整型. 请去除任何不是[0-9]数字的字" +"符。 查看?data.table::setDTthreads." + +#: 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 "" +"忽略无效的R_DATATABLE_NUM_PROCS_PERCENT==%d. 如需使用,它必须是一个2-100的整" +"型,默认值为50查看?setDTtheads." + +#: openmp-utils.c:67 +msgid "'verbose' must be TRUE or FALSE" +msgstr "'verbose'必须是TRUE或者FALSE" + +#: openmp-utils.c:70 +msgid "" +"This installation of data.table has not been compiled with OpenMP support.\n" +msgstr "安装的data.table并不是获得OpenMP支持的编译\n" + +#: openmp-utils.c:75 +#, c-format +msgid " omp_get_num_procs() %d\n" +msgstr " omp_get_num_procs() %d\n" + +#: openmp-utils.c:76 +#, c-format +msgid " R_DATATABLE_NUM_PROCS_PERCENT %s\n" +msgstr " R_DATATABLE_NUM_PROCS_PERCENT %s\n" + +#: openmp-utils.c:77 +#, c-format +msgid " R_DATATABLE_NUM_THREADS %s\n" +msgstr " R_DATATABLE_NUM_THREADS %s\n" + +#: openmp-utils.c:78 +#, c-format +msgid " omp_get_thread_limit() %d\n" +msgstr " omp_get_thread_limit() %d\n" + +#: openmp-utils.c:79 +#, c-format +msgid " omp_get_max_threads() %d\n" +msgstr " omp_get_max_threads() %d\n" + +#: openmp-utils.c:80 +#, c-format +msgid " OMP_THREAD_LIMIT %s\n" +msgstr " OMP_THREAD_LIMIT %s\n" + +#: openmp-utils.c:81 +#, c-format +msgid " OMP_NUM_THREADS %s\n" +msgstr " OMP_NUM_THREADS %s\n" + +#: openmp-utils.c:82 +#, c-format +msgid " RestoreAfterFork %s\n" +msgstr " RestoreAfterFork %s\n" + +#: openmp-utils.c:83 +#, c-format +msgid " data.table is using %d threads. See ?setDTthreads.\n" +msgstr " data.table 正在使用 %d 线程. 查看 ?setDTthreads.\n" + +#: openmp-utils.c:91 +msgid "" +"restore_after_fork= must be TRUE, FALSE, or NULL (default). " +"getDTthreads(verbose=TRUE) reports the current setting.\n" +msgstr "" +"restore_after_fork= 必须是 TRUE, FALSE, 或者 NULL (默认值). " +"getDTthreads(verbose=TRUE) 来查看当前设置.\n" + +#: openmp-utils.c:105 +#, c-format +msgid "" +"threads= must be either NULL (default) or a single number. It has length %d" +msgstr "threads= 必须是 NULL (默认值) 或者一个数字. 目前它长度为 %d" + +#: openmp-utils.c:107 +msgid "threads= must be either NULL (default) or type integer/numeric" +msgstr "threads= 必须是 NULL (默认值) 或者数字/整型类型" + +#: openmp-utils.c:109 +msgid "" +"threads= must be either NULL or a single integer >= 0. See ?setDTthreads." +msgstr "threads= 必须是 NULL 或者一个>=0 的整型。 查看 ?setDTthreads." + +#: openmp-utils.c:114 +msgid "Internal error: percent= must be TRUE or FALSE at C level" +msgstr "内部错误: 在 C 中,percent= 必须是TRUE or FALSE " + +#: openmp-utils.c:117 +#, c-format +msgid "" +"Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C " +"level)." +msgstr "内部错误: threads==%d 应该为 2 至 100 (percent=TRUE, 在 C 中)." + +#: rbindlist.c:8 +msgid "fill= should be TRUE or FALSE" +msgstr "fill= 应该是 TRUE 或 FALSE" + +#: rbindlist.c:10 +msgid "use.names= should be TRUE, FALSE, or not used (\"check\" by default)" +msgstr "use.names= 应该是 TRUE, FALSE, 或者默认不使用 (\"check\" )" + +#: rbindlist.c:12 +msgid "" +"Input to rbindlist must be a list. This list can contain data.tables, data." +"frames or plain lists." +msgstr "" +"rbindlist的输入必须是一个list. 该list可以包含data.table, data.frame 或者 普通" +"list." + +#: rbindlist.c:16 +msgid "use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE." +msgstr "当fill是TRUE时,use.names= 不能是FALSE . 正在设置 use.names=TRUE." + +#: rbindlist.c:20 +msgid "Internal error: rbindlist.c idcol is not a single string" +msgstr "内部错误: rbindlist.c idcol 不是一个单字符串" + +#: rbindlist.c:31 +#, c-format +msgid "Item %d of input is not a data.frame, data.table or list" +msgstr "输入项 %d 不是一个data.frame, data.table 或list" + +#: 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 "" +"项%d有%d列, 与第%d项不一致, 它有%d列. 若要填补这些列, 请使用fill=TRUE." + +#: rbindlist.c:42 +#, c-format +msgid "Item %d has %d columns but %d column names. Invalid object." +msgstr "=====================第%d项有%d列, 却有列名 %d 个. 无效对象." + +#: 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 "" +"第 %2$d 项的第 %1$d 列长度为 %3$d,与第 %4$d 列的长度 %5$d 不一致。只有长度" +"为 1 的列会被循环补齐。" + +#: 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 "" +"第%d列['%s'](子项%d的)的长度为0,它(以及%d其他%s类似的)被填充为NA(等同与列表" +"列的NULL值)使得每一个子项统一。" + +#: rbindlist.c:62 +#, c-format +msgid "" +"Total rows in the list is % which is larger than the maximum number " +"of rows, currently %d" +msgstr "列表的总行数为 %,比当前行数的最大值 %d 大。" + +#: rbindlist.c:63 +msgid "use.names=TRUE but no item of input list has any names" +msgstr "use.names=TRUE,但是输入列表的各项均没有名字。" + +#: rbindlist.c:71 +#, c-format +msgid "" +"Failed to allocate upper bound of % unique column names " +"[sum(lapply(l,ncol))]" +msgstr "无法为 % 个独有列名 [sum(lapply(l,ncol))] 的上界分配内存。" + +#: rbindlist.c:102 +#, c-format +msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" +msgstr "错误发生于 rbindlist.c,无法分配 nuniq=%d 项工作内存。" + +#: rbindlist.c:136 +#, c-format +msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" +msgstr "错误发生于 rbindlist.c,无法分配 ncol=%d 项工作内存。" + +#: rbindlist.c:191 +msgid "" +"Internal error: usenames==NA but fill=TRUE. usenames should have been set to " +"TRUE earlier with warning." +msgstr "" +"内部错误:usenames==NA 但是 fill=TRUE。usenames应该已在警告之前被设置为了 " +"TRUE。" + +#: 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 "" +"use.names='check'(从v1.12.2版本开始的默认值)发出该消息并为了向后兼容按照" +"use.names=FALSE执行。有关控制此消息的选项,请参见 v1.12.2 更新信息中的第 5 " +"项。" + +#: 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 "" +"第 %3$d 项的第 %1$d 列 ['%2$s'] 在第 %4$d 项中并不存在。请使用 fill=TRUE 以用" +"NA (或 NULL 若该列为列表(list))填充,或使用 use.names=FALSE 以忽略列" +"名。%5$s" + +#: 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 "内部错误:usenames==NA 但某项或第一项中存在一个无序的名字。 [%d]" + +#: 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 "" +"第 %3$d 项的第 %1$d 列 ['%2$s'] 出现在第 %5$d 项的第 %4$d 列。设置use." +"names=TRUE 以按列名匹配,或使用 use.names=FALSE 以忽视列名。%6$s" + +#: 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 "" +"options()$datatable.rbindlist.check 已设置但并非单个字符串。参见 v1.12.2更新" +"信息中的第 5 项。" + +#: 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 "" +"options()$datatable.rbindlist.check=='%s' 不" +"是'message'|'warning'|'error'|'none'。参见 v1.12.2 更新信息中的第 5 项。" + +#: rbindlist.c:298 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" +"第%2$d 项的第 %1$d 列为因子('factor')类型却没有因子水平(levels),格式错" +"误。" + +#: rbindlist.c:316 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d." +msgstr "第 %2$d 项的第 %1$d 列的类属性与第 %4$d 项的第 %3$d列的不匹配。" + +#: rbindlist.c:326 +#, c-format +msgid "" +"Internal error: column %d of result is determined to be integer64 but " +"maxType=='%s' != REALSXP" +msgstr "" +"内部错误:结果中的第 %d 列应为 integer64 类型,但maxType=='%s' != REALSXP" + +#: rbindlist.c:362 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "未能为结果中第 %d 列的 %d 个有序因子水平分配工作内存" + +#: rbindlist.c:383 +#, 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 "" +"第 %2$d 项的第 %1$d 列为一有序因子(ordered factor),但第 %3$d 个水平" +"(level)['%4$s']在第 %6$d 项第 %5$d 列的有序因子水平中缺失。每组有序因子水平" +"应为其中最长有序因子水平的子集。该列将被创建为一非有序因子列。" + +#: rbindlist.c:388 +#, 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 "" +"第 %2$d 项的第 %1$d 列中有序因子水平 '%3$s'<'%4$s'。但在第 %8$d 项第 %7$d 列" +"的有序因子水平中却 '%5$s'<'%6$s'。由于这种模糊性,该列将被创建为一非有序因子" +"列。" + +#: rbindlist.c:433 +#, c-format +msgid "" +"Failed to allocate working memory for %d factor levels of result column %d " +"when reading item %d of item %d" +msgstr "当读取第%4$d项的第%3$d个子项时,无法为第%2$d列的%1$d个因素水平分配工作内存" + +#: rbindlist.c:523 +#, c-format +msgid "Column %d of item %d: %s" +msgstr "第 %2$d 项的第 %1$d 列: %3$s" + +#: reorder.c:17 +#, c-format +msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" +msgstr "列表的第 %d 项是 '%s' 类型,其尚不被支持 (SIZEOF=%d)" + +#: reorder.c:19 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d). Invalid " +"data.table." +msgstr "列 %d 的长度是 %d ,与列 1 (%d) 的长度不同。数据表无效。" + +#: reorder.c:27 +#, c-format +msgid "" +"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " +"supported (SIZEOF=%d)" +msgstr "" +"重新排序需要输入向量,但输入了 '%s' 类型的非向量对象,目前并不支持 (SIZEOF=" +"%d)" + +#: 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中的内部错误:无法重新排序ALTREP向量。请参阅 v1.11.4 中\"新闻" +"\"(NEWS)的项目2,并将其作为 BUG 上报。" + +#: reorder.c:33 +msgid "order must be an integer vector" +msgstr "排序必须是整数向量" + +#: reorder.c:34 +#, c-format +msgid "nrow(x)[%d]!=length(order)[%d]" +msgstr "nrow(x)[%d] 不等于 length(order)[%d]" + +#: reorder.c:48 +#, c-format +msgid "order is not a permutation of 1:nrow[%d]" +msgstr "顺序与 1 到 nrow[%d] 的排列不同" + +#: reorder.c:57 +#, c-format +msgid "" +"Unable to allocate %d * %d bytes of working memory for reordering data.table" +msgstr "在工作内存中无法分配 %d * %d 个字节对 data.table 重新排序" + +#: shift.c:17 +#, c-format +msgid "" +"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" +msgstr "" +"传递给 shift() 的 '%s' 类型,必须是向量、列表、data.frame 或 data.table" + +#: 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() 的类型无效,请提前排查。请向 data.table 提交问题追踪" +"(issue tracker)报告" + +#: shift.c:31 +msgid "Internal error: k must be integer" +msgstr "内部错误:k 必须是整数" + +#: shift.c:33 +#, c-format +msgid "Item %d of n is NA" +msgstr "n 的第 %d 项是NA" + +#: shift.c:157 +#, c-format +msgid "Unsupported type '%s'" +msgstr "不支持 '%s' 类型" + +#: subset.c:7 +#, c-format +msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" +msgstr "内部错误: subsetVectorRaw ans length(ans)==%d n=%d" + +#: 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 "" +"内部错误:data.table 子集不支持列类型 '%s' 。已知所有类型均被支持,因此请提交" +"此BUG。" + +#: subset.c:97 subset.c:121 +#, c-format +msgid "Internal error. 'idx' is type '%s' not 'integer'" +msgstr "内部错误:'idx' 是 '%s' 类型,而非 '整数'" + +#: subset.c:122 +#, c-format +msgid "" +"Internal error. 'maxArg' is type '%s' and length %d, should be an integer " +"singleton" +msgstr "内部错误:'maxArg' 是 '%s' 类型,长度为 %d ,应该是单一整数" + +#: subset.c:123 +msgid "Internal error: allowOverMax must be TRUE/FALSE" +msgstr "内部错误:allowOverMax 必须是 TRUE 或 FALSE" + +#: subset.c:125 +#, c-format +msgid "Internal error. max is %d, must be >= 0." +msgstr "内部错误。最大值是 %d ,且必须 >= 0。" + +#: subset.c:149 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]" +msgstr "i[%d] 是 %d ,超出 [1,nrow=%d] 的范围" + +#: subset.c:161 +#, c-format +msgid "" +"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." +msgstr "i 的第 %d 项是 %d ,第 %d 项是 %d 。正负不能混用。" + +#: subset.c:171 +#, c-format +msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." +msgstr "i 的第 %d 项是 %d ,第 %d 项是 NA 。负值和 NA 不能混用。" + +#: 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 "" +"i 的第 %d 项是 %d ,但只有 %d 行。忽略这项以及其他相似的 %d 项(共 %d 项)。" + +#: 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 "" +"i 的第 %d 项是 %d ,它删除了这项但此操作之前发生过。忽略该重复以及其他 %d 个" +"重复。" + +#: subset.c:223 +#, c-format +msgid "Column %d is NULL; malformed data.table." +msgstr "%d 列为空(NULL);data.table 格式错误。" + +#: subset.c:226 +#, c-format +msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." +msgstr "%d ['%s'] 列是 data.frame 或 data.table; data.table 格式错误。" + +#: subset.c:231 +#, c-format +msgid "" +"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." +"table." +msgstr "%d ['%s'] 长度为 %d ,而列 1 的长度为 %d ;data.table 格式错误。" + +#: subset.c:247 +#, c-format +msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" +msgstr "内部错误:CsubsetDT 的参数 'x' 是 '%s' 类型而非列表" + +#: subset.c:260 +#, c-format +msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" +msgstr "内部错误:CsubsetDT 的参数 'cols' 是 '%s' 类型而非整数" + +#: subset.c:337 +msgid "" +"Internal error: NULL can not be subset. It is invalid for a data.table to " +"contain a NULL column." +msgstr "内部错误:空集(NULL)不能作为子集。data.table 包含空列是无效的。" + +#: subset.c:339 +msgid "" +"Internal error: CsubsetVector is internal-use-only but has received " +"negatives, zeros or out-of-range" +msgstr "" +"内部错误:CsubsetVector 仅供内部使用,但收到了负数、零或其他超出范围的值" + +#: transpose.c:9 +msgid "l must be a list." +msgstr "l 必须是列表" + +#: transpose.c:13 +msgid "ignore.empty should be logical TRUE/FALSE." +msgstr "ignore.empty 应该是逻辑类型 TRUE 或 FALSE。" + +#: transpose.c:16 +msgid "" +"keep.names should be either NULL, or the name of the first column of the " +"result in which to place the names of the input" +msgstr "keep.names 应该是空(NULL),或者为放置输入名称的结果中第一列的列名" + +#: transpose.c:19 +msgid "fill must be a length 1 vector, such as the default NA" +msgstr "fill 必须是长度为 1 的向量,例如默认值 NA" + +#: transpose.c:28 +#, c-format +msgid "Item %d of list input is not an atomic vector" +msgstr "列表输入的第 %d 项不是原子(atomic)向量" + +#: types.c:55 +msgid "internal error: status, nx, nk must be integer" +msgstr "内部错误:status, nx, nk 必须是整数" + +#: uniqlist.c:14 +msgid "Internal error: uniqlist has not been passed a list of columns" +msgstr "内部错误:uniqlist 尚未传递列" + +#: uniqlist.c:17 +msgid "Internal error: uniqlist has been passed a non-integer order" +msgstr "内部错误:uniqlist 已经传递非整数序列" + +#: uniqlist.c:18 +msgid "Internal error: uniqlist has been passed a length-0 order" +msgstr "内部错误:uniqlist 已经传递长度为 0 的序列" + +#: uniqlist.c:19 +#, c-format +msgid "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" +msgstr "内部错误:uniqlist 已经传递长度为 %d 的序列,而行数是 %d" + +#: uniqlist.c:96 uniqlist.c:127 uniqlist.c:208 uniqlist.c:245 uniqlist.c:318 +#, c-format +msgid "Type '%s' not supported" +msgstr "类型 '%s' 不被支持" + +#: uniqlist.c:148 +msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" +msgstr "输入到 'uniqlengths' 的参数 'x' 必须是整数向量" + +#: uniqlist.c:149 +msgid "" +"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" +msgstr "输入到 'uniqlengths' 的参数 'n' 必须是长度为 1 的整数向量" + +#: uniqlist.c:167 +msgid "cols must be an integer vector with length >= 1" +msgstr "cols必须是一个长度大于等于1的整数向量" + +#: uniqlist.c:171 +#, c-format +msgid "Item %d of cols is %d which is outside range of l [1,length(l)=%d]" +msgstr "列的%d项是%d,它超出l的所在区间[1,length(l)=%d]" + +#: uniqlist.c:174 +#, c-format +msgid "" +"All elements to input list must be of same length. Element [%d] has length " +"% != length of first element = %." +msgstr "" +"列表的所有元素必须是同样的长度。元素[%d]的长度%不等于第一个元素的长" +"度%" + +#: uniqlist.c:255 +msgid "Internal error: nestedid was not passed a list length 1 or more" +msgstr "内部错误:nestedid并不是一个长度大于或者等于1的列表" + +#: uniqlist.c:262 +#, c-format +msgid "Internal error: nrows[%d]>0 but ngrps==0" +msgstr "内部错误:nrows[%d]>0但是but ngrps==0" + +#: uniqlist.c:264 +msgid "cols must be an integer vector of positive length" +msgstr "cols必须是一个长度大于零的整数向量" + +#: uniqlist.c:349 +msgid "x is not a logical vector" +msgstr "x不是一个逻辑向量" + +#: utils.c:73 +#, c-format +msgid "Unsupported type '%s' passed to allNA()" +msgstr "allNA() 不支持'%s'类型" + +#: utils.c:92 +msgid "'x' argument must be data.table compatible" +msgstr "'x' 必须为data.table支持的类型" + +#: utils.c:94 +msgid "'check_dups' argument must be TRUE or FALSE" +msgstr "参数'check_dups'必须为TRUE或者是FALSE" + +#: 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 "指定列的参数指定了不存在的列: cols[%d]=%d" + +#: utils.c:121 +msgid "'x' argument data.table has no names" +msgstr "data.table的参数x并没有名字" + +#: utils.c:126 +#, c-format +msgid "" +"argument specifying columns specify non existing column(s): cols[%d]='%s'" +msgstr "指定列的参数指定了不存在的列: cols[%d]='%s'" + +#: 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 "%s:fill参数的长度必须为1" + +#: utils.c:171 +#, c-format +msgid "%s: fill argument must be numeric" +msgstr "%s:fill参数必须为数值类型" + +#: utils.c:273 +#, c-format +msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" +msgstr "内部错误:copyAsPlain()不支持类型为'%s'的参数" + +#: utils.c:277 +#, c-format +msgid "" +"Internal error: type '%s' passed to copyAsPlain() but it seems " +"copyMostAttrib() retains ALTREP attributes" +msgstr "" +"内部错误:copyAsPlain()中参数为'%s'类型,但copyMostAttrib() 保留了ALTREP属性" + +#: utils.c:312 +#, c-format +msgid "Found and copied %d column%s with a shared memory address\n" +msgstr "发现并拷贝了具有相同的内存地址的%d列%s\n" + +#: vecseq.c:13 +msgid "x must be an integer vector" +msgstr "x必须为一个整数向量" + +#: vecseq.c:14 +msgid "len must be an integer vector" +msgstr "len必须为一个整数向量" + +#: vecseq.c:15 +msgid "x and len must be the same length" +msgstr "x和len必须长度一致" + +#: vecseq.c:21 +msgid "" +"Join results in more than 2^31 rows (internal vecseq reached physical " +"limit). Very likely misspecified join. Check for duplicate key values in i " +"each of which join to the same group in x over and over again. If that's ok, " +"try by=.EACHI to run j for each group to avoid the large allocation. " +"Otherwise, please search for this error message in the FAQ, Wiki, Stack " +"Overflow and data.table issue tracker for advice." +msgstr "" +"连接后将生成超过2^31行(已达内部的vecseq的物理极限)。这很可能是一个错误的连" +"接操作。请检查i中是否存在重复的键值(key values),导致x中对应的组反复连接。" +"若确定重复的连接可授受,可尝试 by=.EACHI 以使j中的语句仅在每个 i 中对应的组运" +"行以避免大量的内存分配。否则,请在常见问题(FAQ)、维基(Wiki)、Stack " +"Overflow 和 data.table GitHub Issue中寻求帮助。" + +#: vecseq.c:25 +msgid "clamp must be a double vector length 1" +msgstr "clamp 必须为一个长度为1的双精度向量" + +#: vecseq.c:27 +msgid "clamp must be positive" +msgstr "clamp必须为正数" + +#: vecseq.c:28 +#, c-format +msgid "" +"Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate " +"key values in i each of which join to the same group in x over and over " +"again. If that's ok, try by=.EACHI to run j for each group to avoid the " +"large allocation. If you are sure you wish to proceed, rerun with allow." +"cartesian=TRUE. Otherwise, please search for this error message in the FAQ, " +"Wiki, Stack Overflow and data.table issue tracker for advice." +msgstr "" +"连接后生成%d行;多于%d = nrow(x)+nrow(i)。请检查i中是否存在重复的键值(key " +"values),导致x中对应的组反复连接。若确定重复的连接可授受,可尝试 by=.EACHI " +"以使j中的语句仅在每个 i 中对应的组运行以避免大量的内存分配。如果确认要继续," +"请设置cartesian=TRUE 并重新运行。否则,请在常见问题(FAQ)、维基(Wiki)、" +"Stack Overflow 和 data.table GitHub Issue中寻求帮助。" + +#: wrappers.c:11 +msgid "Attribute name must be a character vector of length 1" +msgstr "属性的名字必须为一个长度为1的字符向量" + +#: wrappers.c:16 +msgid "" +"Internal structure doesn't seem to be a list. Can't set class to be 'data." +"table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods " +"instead." +msgstr "" +"内部结构并不非一个列表。无法将目标的类型设置为一个data.table或data.frame。请" +"使用'as.data.table()' 或 'as.data.frame()'." + +#: wrappers.c:66 +msgid "First argument to setlistelt must be a list()" +msgstr "setlistelt的第一个参数必须是一个列表" + +#: wrappers.c:67 +msgid "Second argument to setlistelt must a length 1 integer vector" +msgstr "setlistelt的第二个参数必须为一个长度为1的整数向量" + +#: wrappers.c:69 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "i (%d)超出了[1,%d]的范围" + +#: wrappers.c:91 +msgid "x isn't a VECSXP" +msgstr "x并非一个VECSXP" + +#: wrappers.c:106 +#, c-format +msgid "" +"dim.data.table expects a data.table as input (which is a list), but seems to " +"be of type %s" +msgstr "" +"dim.data.table的参数必须为一个data.table(实质为一个列表),但输入参数为%s类" +"型" diff --git a/src/assign.c b/src/assign.c index d8526550cf..d339cbfe15 100644 --- a/src/assign.c +++ b/src/assign.c @@ -4,12 +4,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])); @@ -284,10 +284,10 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) int ndelete=0; // how many columns are being deleted const char *c1, *tc1, *tc2; int *buf, newKeyLength, indexNo; - 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 @@ -295,15 +295,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)) : @@ -312,24 +312,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)) { @@ -337,12 +337,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); @@ -356,7 +356,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)); } } } @@ -401,42 +400,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 @@ -446,18 +444,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]] @@ -553,7 +551,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++; @@ -561,12 +559,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); @@ -577,7 +575,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); @@ -598,7 +596,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)); @@ -607,14 +605,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 @@ -679,11 +677,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)) { @@ -709,7 +707,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 @@ -723,7 +721,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 { @@ -731,13 +729,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 @@ -758,7 +756,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; } @@ -1198,13 +1196,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; @@ -1214,18 +1212,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); @@ -1240,4 +1238,3 @@ SEXP setcolorder(SEXP x, SEXP o) Free(tmp); return(R_NilValue); } - diff --git a/src/between.c b/src/between.c index 1edf95a093..b4444d968c 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 (%"PRId64") is greater than item %d of upper (%"PRId64")", (i&lowMask)+1, l, (i&uppMask)+1, u); + error(_("Item %d of lower (%"PRId64") is greater than item %d of upper (%"PRId64")"), (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(x) ? LENGTH(VECTOR_ELT(x,0)) : 0; iN = ilen = anslen = LENGTH(i) ? LENGTH(VECTOR_ELT(i,0)) : 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..0cf2d8bca8 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)); + SEXP colname = isNull(VECTOR_ELT(dt, INTEGER(lhs)[j]-1)) ? 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)); // e.g. in #4990 `:=` did not issue recycling warning during grouping. Now it is error not warning. } } + int n = LENGTH(VECTOR_ELT(dt, 0)); for (int j=0; j0 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 +358,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 +441,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 +479,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 +496,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 +548,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 %"PRId64" but must be 1", (int64_t)xlength(na)); + error(_("Length of 'na' is %"PRId64" but must be 1"), (int64_t)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..3d1effa8a9 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(_("Internal error in concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= %d"), length(vec)); // # nocov } 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,22 @@ 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")); + if (LOGICAL(verboseArg)[0] == TRUE) verbose = TRUE; 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 40821ee6b1..ea0be76d04 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, (int)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=%"PRIu64" min=%"PRIu64" max=%"PRIu64" na_count==%d\n", range, min, max, na_count); + // Rprintf(_("range=%"PRIu64" min=%"PRIu64" max=%"PRIu64" 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=%"PRIu64" max2=%"PRIu64" naval==%"PRIu64" nanval==%"PRIu64"\n", asc, min2, max2, naval, nanval); + // Rprintf(_("asc=%d min2=%"PRIu64" max2=%"PRIu64" naval==%"PRIu64" nanval==%"PRIu64"\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]==%20"PRIu64"\n", i, (uint64_t)stat[i]); + if (stat[i]) Rprintf(_("stat[%03d]==%20"PRIu64"\n"), i, (uint64_t)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,7 +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 fc59073da0..69082c5d95 100644 --- a/src/fread.c +++ b/src/fread.c @@ -96,8 +96,12 @@ typedef struct FieldParseContext { // Forward declarations static void Field(FieldParseContext *ctx); +// note -- because ASSERT is doing literal char array concatenation, it is +// not possible to do translation of its messages without refactoring -- +// essentially that would come down to creating f() g() in the code after +// macro expansion, which is not valid. These are internal errors, so just concede. #define ASSERT(cond, msg, ...) \ - if (!(cond)) STOP("Internal error in line %d of fread.c, please report on data.table GitHub: " msg, __LINE__, __VA_ARGS__) // # nocov + if (!(cond)) STOP(_("Internal error in line %d of fread.c, please report on data.table GitHub: " msg), __LINE__, __VA_ARGS__) // # nocov @@ -140,10 +144,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; } @@ -182,7 +186,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]; @@ -203,7 +207,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) { @@ -428,13 +432,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); } @@ -1025,7 +1029,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) { @@ -1086,17 +1090,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; @@ -1104,7 +1108,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 @@ -1122,12 +1126,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; (void)strtod(ch, &end); // careful not to let "" get to here (see continue above) as strtod considers "" numeric @@ -1137,21 +1141,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 = %"PRId64"\n", (int64_t)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 = %"PRId64"\n"), (int64_t)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; @@ -1159,10 +1163,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) @@ -1179,29 +1183,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). @@ -1218,33 +1222,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, // # nocov + 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(); @@ -1261,42 +1265,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 (ch> file' to avoid this "); + if (verbose) DTPRINT(_(" File ends abruptly with '%c'. Copying file in RAM. %s copy.\n"), eof[-1], msg); // In future, we may discover a way to mmap fileSize+1 on all OS when fileSize%4096==0, reliably. If and when, this clause can be updated with no code impact elsewhere. copyFile(fileSize, msg, verbose); } @@ -1361,19 +1365,19 @@ int freadMain(freadMainArgs _args) { int row1line = 1; // The line number where the data starts. Normally row 1 is column names and row1line ends up == 2. { ch = pos; - if (verbose) DTPRINT("[05] Skipping initial rows if needed\n"); + if (verbose) DTPRINT(_("[05] Skipping initial rows if needed\n")); // line is for error and warning messages so considers raw \n whether inside quoted fields or not, just // like wc -l, head -n and tail -n if (args.skipString) { ch = strstr(sof, args.skipString); // as there is now a \0 at the end, this is safely bounded - if (!ch) STOP("skip='%s' not found in input (it is case sensitive and literal; i.e., no patterns, wildcards or regex)", + if (!ch) STOP(_("skip='%s' not found in input (it is case sensitive and literal; i.e., no patterns, wildcards or regex)"), args.skipString); while (ch>sof && ch[-1]!='\n') ch--; // move to beginning of line pos = ch; ch = sof; while (ch sof && verbose) DTPRINT(" Skipped to line %"PRIu64" in the file", (uint64_t)row1line); - if (ch>=eof) STOP("skip=%"PRIu64" but the input only has %"PRIu64" line%s", (uint64_t)args.skipNrow, (uint64_t)row1line, row1line>1?"s":""); + if (ch > sof && verbose) DTPRINT(_(" Skipped to line %"PRIu64" in the file"), (uint64_t)row1line); + if (ch>=eof) STOP(_("skip=%"PRIu64" but the input only has %"PRIu64" line%s"), (uint64_t)args.skipNrow, (uint64_t)row1line, row1line>1?"s":""); pos = ch; } @@ -1396,10 +1400,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; } @@ -1417,11 +1421,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 @@ -1440,14 +1444,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 @@ -1462,7 +1466,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 @@ -1481,7 +1485,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 { @@ -1489,7 +1493,7 @@ int freadMain(freadMainArgs _args) { const char *prevLineStart=ch, *lineStart=ch; int lastncol = countfields(&ch); if (lastncol<0) continue; // invalid file with this sep and quote rule, skip - ASSERT(lastncol>0, "Internal error: first non-empty row should always be at least one field; %c %d", sep, quoteRule); // # nocov + ASSERT(lastncol>0, "first non-empty row should always be at least one field; %c %d", sep, quoteRule); // # nocov const char *thisBlockStart=lineStart; const char *thisBlockPrevStart = NULL; int thisBlockLines=1, thisRow=0; @@ -1531,14 +1535,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; @@ -1554,12 +1558,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; @@ -1575,29 +1579,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); - 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 + 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, "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'; @@ -1616,12 +1619,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++; @@ -1642,10 +1645,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", - thisNcol0 ? "Most likely this jump landed awkwardly so type bumps here will be skipped." : ""); + 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 break; @@ -1710,7 +1713,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); } } @@ -1723,7 +1726,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(%"PRIu64") > allocnrow(%"PRIu64")", (uint64_t)sampleLines, (uint64_t)allocnrow); // # nocov + if (sampleLines > allocnrow) STOP(_("Internal error: sampleLines(%"PRIu64") > allocnrow(%"PRIu64")"), (uint64_t)sampleLines, (uint64_t)allocnrow); // # nocov } } if (nrowLimit < allocnrow) { - if (verbose) DTPRINT(" Alloc limited to lower nrows=%"PRIu64" passed in.\n", (uint64_t)nrowLimit); + if (verbose) DTPRINT(_(" Alloc limited to lower nrows=%"PRIu64" passed in.\n"), (uint64_t)nrowLimit); estnrow = allocnrow = nrowLimit; } } @@ -1835,7 +1838,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) @@ -1843,7 +1846,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 = { @@ -1865,7 +1868,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 } @@ -1883,11 +1886,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 } @@ -1897,15 +1900,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]; @@ -1919,7 +1921,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(); } @@ -1927,8 +1929,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 %"PRIu64" rows\n", + DTPRINT(_("[10] Allocate memory for the datatable\n")); + DTPRINT(_(" Allocating %d column slots (%d - %d dropped) with %"PRIu64" rows\n"), ncol-ndrop, ncol, ndrop, (uint64_t)allocnrow); } size_t DTbytes = allocateDT(type, size, ncol, ndrop, allocnrow); @@ -1982,13 +1984,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 %"PRId64" is too large\n", (int64_t)initialBuffRows); + if (initialBuffRows > INT32_MAX) STOP(_("Buffer size %"PRId64" is too large\n"), (int64_t)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=%"PRIu64", total_size=%"PRIu64"\n", + if (verbose) DTPRINT(_(" jumps=[%d..%d), chunk_size=%"PRIu64", total_size=%"PRIu64"\n"), jump0, nJumps, (uint64_t)chunkBytes, (uint64_t)(eof-pos)); ASSERT(allocnrow <= nrowLimit, "allocnrow(%"PRIu64") <= nrowLimit(%"PRIu64")", (uint64_t)allocnrow, (uint64_t)nrowLimit); #pragma omp parallel num_threads(nth) @@ -2000,7 +2002,7 @@ int freadMain(freadMainArgs _args) { nth = omp_get_num_threads(); if (me!=0) { // # nocov start - snprintf(internalErr, internalErrSize, "Internal error: Master thread is not thread 0 but thread %d.\n", me); + snprintf(internalErr, internalErrSize, _("Internal error: Master thread is not thread 0 but thread %d.\n"), me); stopTeam = true; // # nocov end } @@ -2105,7 +2107,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]; @@ -2208,7 +2210,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 %"PRIu64"\n", + _("Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %"PRIu64"\n"), j+1, colNames[j].len, colNamesAnchor + colNames[j].off, typeName[abs(joldType)], typeName[abs(thisType)], (int)(tch-fieldStart), fieldStart, (uint64_t)(ctx.DTi+myNrow)); @@ -2257,7 +2259,7 @@ int freadMain(freadMainArgs _args) { } else if (headPos!=thisJumpStart) { // # nocov start - snprintf(internalErr, internalErrSize, "Internal error: invalid head position. jump=%d, headPos=%p, thisJumpStart=%p, sof=%p", jump, (void*)headPos, (void*)thisJumpStart, (void*)sof); + snprintf(internalErr, internalErrSize, _("Internal error: invalid head position. jump=%d, headPos=%p, thisJumpStart=%p, sof=%p"), jump, (void*)headPos, (void*)thisJumpStart, (void*)sof); stopTeam = true; // # nocov end } @@ -2330,14 +2332,14 @@ int freadMain(freadMainArgs _args) { if (extraAllocRows) { allocnrow += extraAllocRows; if (allocnrow > nrowLimit) allocnrow = nrowLimit; - if (verbose) DTPRINT(" Too few rows allocated. Allocating additional %"PRIu64" rows (now nrows=%"PRIu64") and continue reading from jump %d\n", + if (verbose) DTPRINT(_(" Too few rows allocated. Allocating additional %"PRIu64" rows (now nrows=%"PRIu64") and continue reading from jump %d\n"), (uint64_t)extraAllocRows, (uint64_t)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; } @@ -2357,7 +2359,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 %"PRIu64". Expected %d fields but found %d. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>", + DTWARN(_("Stopped early on line %"PRIu64". Expected %d fields but found %d. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>"), (uint64_t)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.", (uint64_t)quoteRuleBumpedLine, strlim(quoteRuleBumpedCh, 500)); + DTWARN(_("Found and resolved improper quoting out-of-sample. First healed line %"PRIu64": <<%s>>. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\"\" to avoid this warning."), (uint64_t)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 %"PRIu64" sample rows\n", + DTPRINT(_(" ncol=%d and header detection\n"), ncol); + DTPRINT(_("%8.3fs (%3.0f%%) Column type detection using %"PRIu64" sample rows\n"), tColType-tLayout, 100.0*(tColType-tLayout)/tTot, (uint64_t)sampleLines); - DTPRINT("%8.3fs (%3.0f%%) Allocation of %"PRIu64" rows x %d cols (%.3fGB) of which %"PRIu64" (%3.0f%%) rows used\n", + DTPRINT(_("%8.3fs (%3.0f%%) Allocation of %"PRIu64" rows x %d cols (%.3fGB) of which %"PRIu64" (%3.0f%%) rows used\n"), tAlloc-tColType, 100.0*(tAlloc-tColType)/tTot, (uint64_t)allocnrow, ncol, DTbytes/(1024.0*1024*1024), (uint64_t)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 36e72ff968..7824e366f1 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 5116307393..2229c5cdbe 100644 --- a/src/froll.c +++ b/src/froll.c @@ -11,7 +11,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; @@ -29,14 +29,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 @@ -45,7 +45,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, "frollmeanFast: running for input length %"PRIu64", window %d, hasna %d, narm %d\n", (uint64_t)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %"PRIu64", window %d, hasna %d, narm %d\n"), "frollmeanFast", (uint64_t)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) { @@ -65,20 +65,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; } @@ -134,7 +134,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, "frollmeanExact: running in parallel for input length %"PRIu64", window %d, hasna %d, narm %d\n", (uint64_t)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %"PRIu64", window %d, hasna %d, narm %d\n"), "frollmeanExact", (uint64_t)nx, k, hasna, (int)narm); for (int i=0; idbl_v[i] = fill; } @@ -166,13 +166,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__); } } } @@ -220,7 +220,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; } @@ -237,18 +237,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, "frollsumFast: running for input length %"PRIu64", window %d, hasna %d, narm %d\n", (uint64_t)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %"PRIu64", window %d, hasna %d, narm %d\n"), "frollsumFast", (uint64_t)nx, k, hasna, (int)narm); long double w = 0.0; bool truehasna = hasna>0; if (!truehasna) { @@ -268,20 +268,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; } @@ -332,7 +332,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, "frollsumExact: running in parallel for input length %"PRIu64", window %d, hasna %d, narm %d\n", (uint64_t)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %"PRIu64", window %d, hasna %d, narm %d\n"), "frollsumExact", (uint64_t)nx, k, hasna, (int)narm); for (int i=0; idbl_v[i] = fill; } @@ -359,13 +359,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__); } } } @@ -404,7 +404,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; } @@ -421,17 +421,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 @@ -453,12 +453,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 ceef97179c..46ddea0dfa 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 @@ -26,13 +26,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, "fadaptiverollmeanFast: running for input length %"PRIu64", hasna %d, narm %d\n", (uint64_t)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %"PRIu64", hasna %d, narm %d\n"), "fadaptiverollmeanFast", (uint64_t)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 @@ -55,10 +55,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; } @@ -68,7 +68,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; @@ -111,7 +111,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, "fadaptiverollmeanExact: running in parallel for input length %"PRIu64", hasna %d, narm %d\n", (uint64_t)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %"PRIu64", hasna %d, narm %d\n"), "fadaptiverollmeanExact", (uint64_t)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()) @@ -144,13 +144,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__); } } } @@ -211,17 +211,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, "fadaptiverollsumFast: running for input length %"PRIu64", hasna %d, narm %d\n", (uint64_t)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %"PRIu64", hasna %d, narm %d\n"), "fadaptiverollsumFast", (uint64_t)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 @@ -244,10 +244,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; } @@ -257,7 +257,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; @@ -295,7 +295,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, "fadaptiverollsumExact: running in parallel for input length %"PRIu64", hasna %d, narm %d\n", (uint64_t)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %"PRIu64", hasna %d, narm %d\n"), "fadaptiverollsumExact", (uint64_t)nx, hasna, (int) narm); bool truehasna = hasna>0; if (!truehasna || !narm) { #pragma omp parallel for num_threads(getDTthreads()) @@ -323,13 +323,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 9a71a302f6..d3c695eac3 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=%"PRIu64", lastBatchSize=%"PRIu64")\n", + if (verbose) Rprintf(_("counts is %dMB (%d pages per nBatch=%d, batchSize=%"PRIu64", lastBatchSize=%"PRIu64")\n"), (int)(nBatch*MSBsize*sizeof(R_xlen_t)/(1024*1024)), (int)(nBatch*MSBsize*sizeof(R_xlen_t)/(4*1024*nBatch)), nBatch, (uint64_t)batchSize, (uint64_t)lastBatchSize); @@ -228,7 +228,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; @@ -244,12 +244,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("%"PRId64" ", (int64_t)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(_("%"PRId64" "), (int64_t)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(); @@ -306,7 +306,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 36a90cb149..1f09d431fa 100644 --- a/src/fwrite.c +++ b/src/fwrite.c @@ -229,7 +229,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=%"PRIu64" ; e=%d ", acc, y, l, exp); + // if (verbose) Rprintf(_("\nTRACE: acc=%.20Le ; y=%.20Le ; l=%"PRIu64" ; e=%d "), acc, y, l, exp); if (l%10 >= 5) l+=10; // use the last digit to round l /= 10; @@ -610,25 +610,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 (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 (widthmsg==\"%s\" Z_FINISH=%d Z_BLOCK=%d. %s", + STOP(_("zlib %s (zlib.h %s) deflate() returned error %d with z_stream->msg==\"%s\" Z_FINISH=%d Z_BLOCK=%d. %s"), zlibVersion(), ZLIB_VERSION, failed_compress, failed_msg, Z_FINISH, Z_BLOCK, - verbose ? "Please include the full output above and below this message in your data.table bug report." - : "Please retry fwrite() with verbose=TRUE and include the full output with your data.table bug report."); + verbose ? _("Please include the full output above and below this message in your data.table bug report.") + : _("Please retry fwrite() with verbose=TRUE and include the full output with your data.table bug report.")); if (failed_write) STOP("%s: '%s'", strerror(failed_write), args.filename); // # nocov end } } - diff --git a/src/fwrite.h b/src/fwrite.h index f4219d003d..b03bb571aa 100644 --- a/src/fwrite.h +++ b/src/fwrite.h @@ -3,6 +3,7 @@ #else #define STRICT_R_HEADERS #include + #include "po.h" #define STOP error #define DTPRINT Rprintf #endif diff --git a/src/fwriteR.c b/src/fwriteR.c index 4c6c5a6bb9..5b95dae3ae 100644 --- a/src/fwriteR.c +++ b/src/fwriteR.c @@ -38,7 +38,7 @@ int getMaxStringLen(const SEXP *col, const int64_t n) { 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 @@ 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 } @@ -244,59 +244,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 %"PRId64"!=%"PRId64"", (int64_t)NA_INT64_LL, (int64_t)DtoLL(NA_INT64_D)); + if (NA_INT64_LL != DtoLL(NA_INT64_D)) error(_("Conversion of NA_INT64 via double failed %"PRId64"!=%"PRId64), (int64_t)NA_INT64_LL, (int64_t)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 @@ -325,7 +325,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 @@ -394,7 +394,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 4792c9c635..a3b9789b8f 100644 --- a/src/nafill.c +++ b/src/nafill.c @@ -96,9 +96,9 @@ SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP nan_is_na_arg, SEXP inplace, S 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 { @@ -108,7 +108,7 @@ SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP nan_is_na_arg, SEXP inplace, S 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..37e8435fd6 --- /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 fe997b6da5..614d3bf0fc 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 %"PRId64" which is larger than the maximum number of rows, currently %d", (int64_t)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 %"PRId64" which is larger than the maximum number of rows, currently %d"), (int64_t)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 %"PRId64" unique column names [sum(lapply(l,ncol))]", (int64_t)upperBoundUniqueNames); + if (!uniq) error(_("Failed to allocate upper bound of %"PRId64" unique column names [sum(lapply(l,ncol))]"), (int64_t)upperBoundUniqueNames); savetl_init(); int nuniq=0; for (int i=0; i= for #546 -- TYPEORDER=0 for both LGLSXP and EXPRSXP (but also NULL) if (TYPEORDER(thisType)>=TYPEORDER(maxType) && !isNull(thisCol)) 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; @@ -313,7 +313,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); } @@ -323,13 +323,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++; } @@ -359,7 +359,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); @@ -380,13 +380,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 } @@ -430,7 +430,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) { // API change needs update NEWS.md and man/cdt.Rd 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) { // API change needs update NEWS.md 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 9101987d9a..a23b169685 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 @@ -63,10 +63,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); } @@ -88,7 +88,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