Una colonna fittizia per una colonna c
e un valore dato x
equivale a 1
se c==x
e 0 altro. Di solito, creando dei manichini per una colonna c
, si esclude un valore x
a scelta, poiché l'ultima colonna fittizia non aggiunge alcuna informazione w.r.t. le colonne fittizie già esistenti.R: avviso durante la creazione di un (lungo) elenco di manichini
Ecco come sto cercando di creare una lunga lista di manichini per una colonna firm
, in un data.table
:
values <- unique(myDataTable$firm)
cols <- paste('d',as.character(inds[-1]), sep='_') # gives us nice d_value names for columns
# the [-1]: I arbitrarily do not create a dummy for the first unique value
myDataTable[, (cols):=lapply(values[-1],function(x)firm==x)]
Questo codice ha funzionato in modo affidabile per le colonne precedenti, che avevano valori unici minori. firm
però è più grande:
tr(values)
num [1:3082] 51560090 51570615 51603870 51604677 51606085 ...
Ho ricevuto un avviso quando si cerca di aggiungere le colonne:
Warning message:
truelength (6198) is greater than 1000 items over-allocated (length = 36). See ?truelength. If you didn't set the datatable.alloccol option very large, please report this to datatable-help including the result of sessionInfo().
Per quanto posso dire, c'è ancora tutte le colonne che ho bisogno. Posso semplicemente ignorare questo problema? Rallenterà i calcoli futuri? Non sono sicuro di cosa fare di questo e del relativo di truelength
.
Fornire i dati, solo un esempio, utilizzare 'dput (myDataTable [1:10])'. ** Modifica: ** sembra correlato alla dimensione delle colonne da aggiungere, quindi i dati di esempio potrebbero non essere facili da condividere. Hai provato a impostare l'opzione menzionata a 'length (values)'? – jangorecki
Oltre 6000 colonne?!? : -O. Leggi '' truelength' e usa 'alloc.col' con l'argomento' n' per far crescere gli slot di riserva su quante colonne hai mai creato .. altrimenti riceverai l'avviso perché dobbiamo sovra-allocare ogni volta di riserva gli slot sono esauriti .. – Arun
@Arun 'ncol (myDataTable)' mi dà '[1] 3085', quindi quel messaggio non ha molto senso. Ho capito correttamente che sono inefficiente ogni volta che aggiungo un'enorme quantità di colonne per le quali non ho preallocato? In tal caso, trattandosi di un'operazione unica, suppongo di star bene. – FooBar