Dlaczego lapply () nie zachowuje moich kluczy danych.table?

Mam na liście kilka danych.tables. chcę aplikowaćunique() do każdej tabeli data.table na mojej liście, ale powoduje to zniszczenie wszystkich moich kluczy data.table.

Oto przykład:

A <- data.table(a = rep(c("a","b"), each = 3), b = runif(6), key = "a")
B <- data.table(x = runif(6), b = runif(6), key = "x")

blah <- unique(A)

Tutaj,blah wciąż ma klucz i wszystko jest na świecie:

key(blah)

# [1] "a"

Ale jeśli dodam dane.tables do listy i użyjęlapply(), klucze zostają zniszczone:

dt.list <- list(A, B)

unique.list <- lapply(dt.list, unique) # Keys destroyed here

lapply(unique.list, key) 

# [[1]]
# NULL

# [[2]]
# NULL

Ma to prawdopodobnie związek z tym, że nie rozumiem, co to znaczy, że klucze mają być przypisane „przez odniesienie”, ponieważ miałem inne problemy z znikaniem kluczy.

Więc:

Dlaczego lapply nie zachowuje moich kluczy?Co oznacza powiedzenie, że klawisze są przypisane „przez odniesienie”?Czy powinienem nawet zapisywać dane na stole?Jak mogę bezpiecznie przechowywać / manipulować danymi.tabele bez obawy o utratę kluczy?

EDYTOWAĆ:

Na co warto, boi sięfor pętla też działa dobrze:

unique.list <- list()

for (i in 1:length(dt.list)) {
  unique.list[[i]] <- unique(dt.list[[i]])
}

lapply(unique.list, key)

# [[1]]
# [1] "a"

# [[2]]
# [1] "x"

Ale to jest R ifor pętle sązło.

questionAnswers(2)

yourAnswerToTheQuestion