R $mycol、[[mycol]]和[,mycol,with=FALSE]的地址列之间的确切区别是什么?

R $mycol、[[mycol]]和[,mycol,with=FALSE]的地址列之间的确切区别是什么?,r,data.table,R,Data.table,在阅读了data.tableFAQ(第1.5节)之后,我的印象是,这三种列的寻址方式或多或少是等效的。但至少[,mycol,with=FALSE]的输出与$mycol和[[mycol]]有很大不同: dt1 <- fread( " id,colA,colB id1,3,xxx id2,0,zzz id3,NA,yyy id4,0,aaa ") dt1$colA <- factor(dt1$colA) myvar="colA" dt1$col

在阅读了
data.table
FAQ(第1.5节)之后,我的印象是,这三种列的寻址方式或多或少是等效的。但至少
[,mycol,with=FALSE]
的输出与
$mycol
[[mycol]]
有很大不同:

dt1 <- fread(
  " id,colA,colB
   id1,3,xxx
   id2,0,zzz
   id3,NA,yyy
   id4,0,aaa
     ")

dt1$colA <- factor(dt1$colA)

myvar="colA"

dt1$colA
# [1] 3    0    <NA> 0   
# Levels: 0 3

dt1[[myvar]]
# [1] 3    0    <NA> 0   
# Levels: 0 3

dt1[, myvar, with=FALSE]
# colA
# 1:    3
# 2:    0
# 3:   NA
# 4:    0

dt1您问题的第一部分,即
$
[[
之间的差异,已在以下章节中介绍:

通过
[
建立索引类似于原子向量,并选择 指定的元素

[[
$
都选择列表中的单个元素 不同之处在于,
$
不允许计算索引,而
[[
是的。
x$name
相当于
x[[“name”,exact=FALSE]]
[[
的部分匹配行为可以使用
精确的
参数

data.table中的符号
dt1[,…myvar]
生成一个数据表,其中列在
myvar
中求值。结果是一个单列数据表,该列的类为
factor


数据帧的等价物是:
as.data.frame(dt1)[,myvar,drop=FALSE]

啊,我错过了最后一个表单也给出了
因子的内容。非常感谢您的解释!