data.table
to fantastyczny pakiet R i używam go w bibliotece, którą tworzę. Jak dotąd wszystko idzie bardzo dobrze, z wyjątkiem jednej komplikacji. Wydaje się, że jest o wiele trudniejsze (w porównaniu z konwencjonalnymi ramkami danych) odnoszenie się do kolumn data.table
przy użyciu nazw zapisanych w zmiennych (tak jak w przypadku ramek danych, na przykład: colname="col"; df[df[,colname]<5,colname]=0
).Odwołując się do kolumn data.table według nazw zapisanych w zmiennych
Być może najbardziej komplikuje to oczywisty brak spójności składni na tym w data.table
. W niektórych przypadkach wydaje się, że działają eval(colname)
i get(colname)
, a nawet c(colname)
. W innych rozwiązaniach jest DT[,colname, with=F]
. Jednak w innych, takich jak na przykład funkcje set()
i subset()
, nie znalazłem żadnego rozwiązania. Wreszcie, skrajny, choć dość powszechny przypadek użycia został omówiony wcześniej (passing column names to data.table programmatically), a proponowane rozwiązania, choć najwyraźniej wykonujące swoją pracę, nie wydawały się szczególnie czytelne ...
Może komplikuję zbyt wiele rzeczy? Jeśli ktokolwiek mógłby napisać krótki kod do odnoszenia się do nazw kolumn data.table
za pomocą zmiennych dla różnych typowych scenariuszy, byłbym bardzo wdzięczny.
UPDATE:
Niektóre konkretne przykłady, że prace wymienione mogę nazwy kolumn ciężko kod:
x.short = subset(x, abs(dist)<=100)
set(x, which(x$val<10), "val", 0)
Teraz zakładamy distcol="dist"
, valcol="val"
. Jaki jest najlepszy sposób na wykonanie powyższych czynności przy użyciu distcol
i valcol
, ale nie dist
i val
?
To pytanie wydaje się zbyt mało precyzyjne. Może być poprawiony, jeśli oferujesz określone przypadki testowe. –
OK, przeniesie przykłady z dyskusji poniżej na samo pytanie. – msp