Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R data.table筛选行时的行为_R_Data.table - Fatal编程技术网

R data.table筛选行时的行为

R data.table筛选行时的行为,r,data.table,R,Data.table,我正在R中创建一个data.table并设置一列作为键。当我试图从数据表中检索值时;对于不匹配的行,我将返回NA值。我通常不希望在搜索中出现这种行为。下面的例子 library(data.table) dt <- data.table('foo'=seq(10),bar=sample(letters,10)) setkey(dt,bar) dt[sample(letters,5)] > dt[sample(letters,5)] b foo 1: x 4 2: q

我正在R中创建一个data.table并设置一列作为键。当我试图从数据表中检索值时;对于不匹配的行,我将返回NA值。我通常不希望在搜索中出现这种行为。下面的例子

library(data.table) 
dt <- data.table('foo'=seq(10),bar=sample(letters,10))
setkey(dt,bar)
dt[sample(letters,5)]


> dt[sample(letters,5)]
   b foo
1: x   4
2: q   2
3: u   8
4: s  NA
5: b  NA
库(data.table)
dt[样本(字母,5)]
比福
1:x4
2:q 2
3:u 8
4:s NA
5:b不适用

要删除
NA
行,只需设置
nomatch=0

下面是一个例子(我删除了随机抽样,这样每个人都可以得到相同的结果)

来自Matt的添加

此外,如果您希望默认值为
nomatch=0
,则可以更改默认值:

options(datatable.nomatch=0)
dt[J(needed_letters)]    # now, no NAs will be returned
您可以像这样检查所有参数:

> args(data.table:::`[.data.table`)

function (x, i, j, by, keyby,
    with = TRUE,
    nomatch = getOption("datatable.nomatch"), 
    mult = "all",
    roll = FALSE,
    rollends = if (roll=="nearest") c(TRUE,TRUE)
               else if (roll>=0) c(FALSE, TRUE)
               else c(TRUE,FALSE),
    which = FALSE,
    .SDcols,
    verbose = getOption("datatable.verbose"), 
    allow.cartesian = getOption("datatable.allow.cartesian"), 
    drop = NULL) 
因此,默认值为via
getOption
的参数可以更改其默认值

> args(data.table:::`[.data.table`)

function (x, i, j, by, keyby,
    with = TRUE,
    nomatch = getOption("datatable.nomatch"), 
    mult = "all",
    roll = FALSE,
    rollends = if (roll=="nearest") c(TRUE,TRUE)
               else if (roll>=0) c(FALSE, TRUE)
               else c(TRUE,FALSE),
    which = FALSE,
    .SDcols,
    verbose = getOption("datatable.verbose"), 
    allow.cartesian = getOption("datatable.allow.cartesian"), 
    drop = NULL)