переименование (конкретных) имен столбцов в одну строку при построении таблицы данных

#r #data.table

#r #data.table

Вопрос:

bar запрошенный вывод с именами столбцов, как было бы желательно. Есть ли способ сделать это в однострочной конструкции foo , без использования второго оператора, т.Е. переименовать rn и V1 в c и d соответственно в конструкции?

Пожалуйста, обратите внимание, что list("s1" = 1, "s2" = 2) он должен оставаться таким, какой он есть.

bar является ли желаемый результат:

    a   b   c  d
1: abc bcd s1 1
2: abc bcd s2 2
  

foo для имитации bar

    a   b   rn  V1
1: abc bcd s1  1
2: abc bcd s2  2
  

Сценарий MWE:

 library(data.table)
bar <- data.table(a = "abc", b = "bcd", c = c("s1", "s2"), d = 1:2)
print("bar:")
print(bar)
foo <- data.table(a = "abc", b = "bcd",
                  data.matrix(list("s1" = 1,
                                   "s2" = 2)), keep.rownames = T)
# colnames(foo) <- c("a", "b", "c", "d")  # without using a second statement like this
print("foo:")
print(foo)
  

PS: Обходной путь, который я сделал, заключался в том, чтобы определить reformat функцию следующим образом, например

 reformat <- function(dt) {
  colnames(dt) <- c("a", "b", "c", "d")
  return(dt)
}
foo <- reformat(data.table(a = "abc", b = "bcd",
                           data.matrix(list("s1" = 1,
                                            "s2" = 2)), keep.rownames = T))
print(foo)
  

но блуждает, есть ли какой-либо способ сделать это без необходимости использования функции.

Ответ №1:

Я что-то упустил?

 setnames(foo, old = c("c", "d"), new = c("rn", "V1"))
  

Ответ №2:

data.table уже есть функция переименования столбцов без копирования data.table .

Вы ищете что-то подобное?

 setnames(foo <- data.table(a = "abc", b = "bcd", 
                           data.matrix(list("s1" = 1, "s2" = 2)), 
                           keep.rownames = TRUE),
         c("a", "b", "c", "d"))
print(foo)
     a   b  c d
1: abc bcd s1 1
2: abc bcd s2 2