事情是酱紫的,楼主用 Rstudio server 连接数据库,需要一次性导入20个表,刚导入时都是 data.frame,然后需要批量转换为 data.table,并且将列名称改成小写,方便后续做其他数据处理。不过遇到了一个问题,如下所示,就是如果把 setDT 这一步写到前面,结果中就没有成功改成小写,而如果把 setDT 这一步写到后面,就成功了。

转换失败的情况

library(data.table)

data1 <- data.frame(TYPE = c(1:3), VALUE = c(2:4))
data2 <- data.frame(TYPE = c(1:3), VALUE = c(2:4))
data3 <- data.frame(TYPE = c(1:3), VALUE = c(2:4))

tables <- mget(paste0("data", c(1:3)))
tables <- lapply(tables, function(dt) {
  setDT(dt)
  setnames(dt, new = tolower(colnames(dt)))
  return(dt)
})

str(data1)

转换成功的情况

library(data.table)

data1 <- data.frame(TYPE = c(1:3), VALUE = c(2:4))
data2 <- data.frame(TYPE = c(1:3), VALUE = c(2:4))
data3 <- data.frame(TYPE = c(1:3), VALUE = c(2:4))

tables <- mget(paste0("data", c(1:3)))
tables <- lapply(tables, function(dt) {
  setnames(dt, new = tolower(colnames(dt)))
  setDT(dt)
  return(dt)
})

str(data1)

data.table version 1.17.0,
两种代码转换都能成功。