Se si desidera eseguire la ricerca di una funzione per un errore o un avviso, si verifica qualcosa di strano se l'argomento viene convertito in un data.table all'interno del funzione:deparse (sostituto()) all'interno della funzione utilizzando data.table come argomento
e <- data.frame(x = 1:10)
### something strange is happening
foo <- function(u) {
u <- data.table(u)
warning(deparse(substitute(u)), " is not a data.table")
u
}
foo(e)
## foo(e)
## x
## 1: 1
## 2: 2
## 3: 3
## 4: 4
## 5: 5
## 6: 6
## 7: 7
## 8: 8
## 9: 9
## 10: 10
## Warning message:
## In foo(e) :
## structure(list(x = 1:10), .Names = "x", row.names = c(NA, -10L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x10026568>) is not a data.table
Se ho Deparse prima data.table
tutto funziona benissimo:
### ok
foo1 <- function(u) {
nu <- deparse(substitute(u))
u <- data.table(u)
warning(nu, " is not a data.table")
u
}
## foo1(e)
## x
## 1: 1
## 2: 2
## 3: 3
## 4: 4
## 5: 5
## 6: 6
## 7: 7
## 8: 8
## 9: 9
## 10: 10
## Warning message:
## In foo1(e) : e is not a data.table
C'è tra l'altro alcuna differenza se e
già è un data.table
o nessuna t. L'ho trovato apposta, quando stavo creando un codice, dove deparse
richiedeva molto tempo perché e
era piuttosto grande.
Cosa sta succedendo qui e come posso gestire tali funzioni per l'ingresso data.frame
e data.table
?
nachti
@nachti, non risponde alla tua domanda? – BrodieG
@ [BrodieG] (http://stackoverflow.com/users/2725969/brodieg): Grazie per la risposta. Come scritto sopra: come posso gestire tali funzioni per l'input 'data.frame' e' data.table'? Dovrei copiarlo (ha bisogno di molto spazio)? O prima spargere tutto e poi sovrascriverlo? – nachti
@nachti, quest'ultimo, prima scarso. Inoltre, se vuoi evitare le copie dovresti prendere in considerazione l'uso di 'setDT' invece di' data.table'. Il primo crea una tabella di dati per riferimento. – BrodieG