R 来自另一个对象(大小1数值向量)的按列索引的子集data.table

R 来自另一个对象(大小1数值向量)的按列索引的子集data.table,r,data.table,subset,R,Data.table,Subset,我试图根据参数l(行号)和cn(列号)对data.table进行子集划分,它们本身就是对象。基于l的子集设置似乎有效。但是,在cn(或get(cn))上进行子集设置是行不通的 例如: > dt <- iris %>% data.table() > > #Subseting (works) > dt[10,3] Petal.Length 1: 1.5 > > #Subseting by exteral parameter

我试图根据参数
l
(行号)和
cn
(列号)对data.table进行子集划分,它们本身就是对象。基于
l
的子集设置似乎有效。但是,在
cn
(或
get(cn)
)上进行子集设置是行不通的

例如:

> dt <- iris %>% data.table()
> 
> #Subseting (works)
> dt[10,3]
   Petal.Length
1:          1.5
> 
> #Subseting by exteral parameter (object)
> cn <- 3 # Petal.Length
> l <- 10
> dt[l,3] #works
   Petal.Length
1:          1.5
> dt[10,cn]
Error in `[.data.table`(dt, 10, cn) : 
  j (the 2nd argument inside [...]) is a single symbol but column name 'cn' is not found. Perhaps you intended DT[, ..c]. This difference to data.frame is deliberate and explained in FAQ 1.1.
> dt[l,cn]
Error in `[.data.table`(dt, l, cn) : 
  j (the 2nd argument inside [...]) is a single symbol but column name 'cn' is not found. Perhaps you intended DT[, ..c]. This difference to data.frame is deliberate and explained in FAQ 1.1.
> dt[l,get(cn)]
Error in get(cn) : invalid first argument
>dt%数据表()
> 
>#分项工程(工程)
>dt[10,3]
花瓣长度
1:          1.5
> 
>#按外部参数子集(对象)
>cn l dt[l,3]#工作
花瓣长度
1:          1.5
>dt[10,cn]
“[.data.table”中的错误(dt,10,cn):
j(在[…]内的第二个参数)是一个符号,但找不到列名“cn”。可能您想要的是DT[,…c]。data.frame的这种差异是经过深思熟虑的,并在常见问题解答1.1中进行了解释。
>dt[l,cn]
“[.data.table”中的错误(dt,l,cn):
j(在[…]内的第二个参数)是一个符号,但找不到列名“cn”。可能您想要的是DT[,…c]。data.frame的这种差异是经过深思熟虑的,并在常见问题解答1.1中进行了解释。
>dt[l,get(cn)]
get(cn)中出错:第一个参数无效

是否有办法将来自外部对象的列号子集?

dt[l,…c]
应该可以工作。(顺便说一句,变量名的选择不正确)@DavidArenburg,tks。这很有效。请将此作为答案写下来,以便我可以将其标记为答案。我很好奇发生了什么。为什么会有这种晦涩的把戏?等等。我修复了c名称,tks用于此工具。这不是一个把戏。主要是因为默认情况下data.table进行非标准计算,例如,它解析未引用的列名,例如
dt[,Petal.Length]
,是默认行为,而在base R中,它将是
df[,“Petal.Length”]
。因此,当您想要将类似
dt[,variable]
的内容传递给data.table时,它需要理解,如果这是一个不带引号的列名,可能是一些函数(在您的例子中,
c
确实也是一个函数)或者变量。
.variable
帮助它理解如何解析您的请求。而对于
data.frame
则很容易,因为它知道所有未引用的内容都是变量。