"找不到对象'ansvals'"错误 - 这是什么意思?

Vas*_*y A 5 r data.table

从我的简单data.table,例如,像这样:

dt1 <- fread("
col1 col2 col3
AAA  ab   cd
BBB  ef   gh
BBB  ij   kl
CCC  mn   nm")
Run Code Online (Sandbox Code Playgroud)

我正在制作新表,例如,像这样:

dt1[,
    .(col3, new=.N),
    by=col1]

>   col1 col3 new
>1:  AAA   cd   1
>2:  BBB   gh   2
>3:  BBB   kl   2
>4:  CCC   op   1
Run Code Online (Sandbox Code Playgroud)

当我明确指出列名时,这工作正常.但是当我在变量中使用它们并尝试使用时with=F,会出现错误:

colBy   <- 'col1'
colShow <- 'col3' 

dt1[,
    .(colShow, 'new'=.N),
    by=colBy,
    with=F] 
# Error in `[.data.table`(dt1, , .(colShow, new = .N), by = colBy, with = F) :   object 'ansvals' not found
Run Code Online (Sandbox Code Playgroud)

到目前为止,我找不到有关此错误的任何信息.

Jaa*_*aap 7

您收到此错误消息的原因是,在使用with=FALSE时告诉data.table将其j视为数据帧.因此,预计COLUMNNAMES的向量,而不是表达式中被评估jnew=.N.

?data.table约的文档with:

默认情况下with=TRUE,j在x的帧内计算; 列名可以用作变量.当with=FALSEj是列名的字符向量或要选择的列位置的数字向量时,返回的值始终是data.table.

当你使用时with=FALSE,你必须在j没有.之前选择列名,()如下所示:dt1[, (colShow), with=FALSE].其他选项是dt1[, c(colShow), with=FALSE]dt1[, colShow, with=FALSE].使用可以获得相同的结果dt1[, .(col3)]

综上所述:with = FALSE用于选择data.frame方式的列.所以,你应该这样做.

同样通过使用by = colBy你告诉data.table来评估j哪个是与之相矛盾的with = FALSE.

?data.table约的文档j:

单列名称,列名称的单个表达,列名称list()的表达式,计算列表的表达式或函数调用(包括也是列表的data.frame和data.table),或者(当with=FALSE)名称向量时或选择的位置.

j在data.table的框架内进行评估; 即,它将列名称视为变量.使用j=list(...)返回多个列和/或列的表达式.单个列或单个表达式返回该类型,通常是向量.查看示例.

又见点1.D1.G引进小品文data.table.


ansvalsdata.table内部使用的名称.您可以在此处使用ctrl+ f(Windows)或cmd+ f(macOS)查看代码中显示的位置.