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

时间:2014-06-08 23:56:38

标签: r data.table

在阅读data.table常见问题解答(第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

那么,这三种方法之间的确切区别是什么?我可以假设$mycol[[mycol]]始终相同吗?为什么[, mycol, with=FALSE]&#34;失去&#34;因素是什么?

提前致谢。

1 个答案:

答案 0 :(得分:3)

问题的第一部分,$[[之间的差异,已在this question中介绍过:

  

[索引与原子向量类似,并选择一个列表   指定的元素。

     

[[$都会选择列表中的单个元素。主要的   差异是$不允许计算索引,而[[   确实。 x$name相当于x[["name", exact = FALSE]]。也,   [[的部分匹配行为可以使用   exact论证。

dt1[, myvar, with=FALSE]中的符号data.table会生成一个数据表,其中包含在myvar中评估的列。结果是一列数据表,该列的类为factor

等效的数据框将是:as.data.frame(dt1)[, myvar, drop = FALSE]