一些J表达式保留列名称,有些则不保留:
library(data.table)
d = data.table(hello = 1)
d[, .(hello)]
# hello
# 1: 1
d[, c(.(hello))]
# V1
# 1: 1
d[, {.(hello)}]
# hello
# 1: 1
d[, {1; .(hello)}]
# V1
# 1: 1
d[, .(get("hello"))]
# V1
# 1: 1
d[, mget("hello")]
# hello
# 1: 1
d[, c(mget("hello"))]
# Error: value for ‘hello’ not found # WTF?
d[, {1; mget("hello")}]
# hello
# 1: 1
Run Code Online (Sandbox Code Playgroud)
一般规则是什么?
这真的不是很神秘.首先要注意.是速记list在data.table.考虑到这一点,这就是正在发生的事情.
您拥有的每个单独的表达式都会生成一个未命名的列表或向量,除了mget它会吐出一个命名列表.这就是mget示例命名结果的原因.在所有其他示例中,data.table只使用非常简单的表达式推断出名称,这些表达式相当于list(items).还有一些案例,你会得到名称扣除.SD,但一般来说 - 如果你没有命名(如同mget)并且它比复杂list(items),那么不要指望名称扣除.
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |