本菜鸟一直以为引号是引用英文变量名称的,而反引号用来引用中文变量名称,直到今天踩了个坑。如下,用反引号引用两个变量,会使得结果变成一个长长的字符串,而用引号的话就还是数据框,原因想不明白中……

```
df <-
  data.table(`中文字段名称1` = c("一串文本", "又一串文本"),
             `中文字段名称2` = c("金木水火土", "鑫森淼"))

df1 <- df[, c(`中文字段名称1`, `中文字段名称2`)]
df2 <- df[, c("中文字段名称1", "中文字段名称2")]
```
> str(df1)
 chr [1:4] "一串文本" "又一串文本" "金木水火土" "鑫森淼"
> str(df2)
Classes ‘data.table’ and 'data.frame':	2 obs. of  2 variables:
 $ 中文字段名称1: chr  "一串文本" "又一串文本"
 $ 中文字段名称2: chr  "金木水火土" "鑫森淼"
 - attr(*, ".internal.selfref")=<externalptr> 

感觉你这可以分成两个问题,一个是引号和反引号的使用,引号是用于字符串的,引起来的部分就是字符内容,反引号是用于调用非常规名字的 R object 的

# character
x <- c('a', 'b')
str(x)
#>  chr [1:2] "a" "b"

# R object with special names
`1` <- 2
print(`1`)
#> [1] 2

`name with space` <- 'aaa'
print(`name with space`)
#> [1] "aaa"

print(`+`)
#> function (e1, e2)  .Primitive("+")

第二个问题就是 data.table 的参数 j,作为字符串输入的话,和 data.frame 取某几列一样

df <- data.table(x = 1:2, y = 3:4, z = 5:6)
df[ , c('x', 'z')]
#>    x z
#> 1: 1 5
#> 2: 2 6

df1 <- data.frame(x = 1:2, y = 3:4, z = 5:6)
df[ , c('x', 'z')]
#>    x z
#> 1: 1 5
#> 2: 2 6

而作为变量名输入的话,本小白猜测是类似with函数来处理了

When with=TRUE (default), j is evaluated within the frame of the data.table

df[ , c(x, z)]
#> [1] 1 2 5 6

with(df, c(x, z))
#> [1] 1 2 5 6

    meeeeeeeeo

    哦,原来是我把两个问题混在一起了,难怪想不明白,这下子弄明白了,谢谢您。