Sto riscontrando un problema nel far funzionare data.table nelle funzioni esportate in roxygen2.R data.table si interrompe nelle funzioni esportate
Ecco un semplice, funzione di falso in un file chiamato foo.R (si trova nella directory R del mio pacchetto) che usa data.table:
#' Data.table test function
#' @export
foo <- function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
Se Copio e incollo questa funzione in R, questa funzione funziona bene:
> foo <- function() {
+ m <- data.table(c1 = c(1,2,3))
+ print(is.data.table(m))
+ m[,sum(c1)]
+ }
> foo()
[1] TRUE
[1] 6
Ma se ho semplicemente caricare la funzione esportata, R pensa che la data.table è un data.frame e si rompe:
> rm(foo)
> load_all()
Loading test_package
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
<environment: namespace:test_package>
> foo()
[1] TRUE
Error in `[.data.frame`(x, i, j) : object 'c1' not found
Che succede?
UPDATE
Grazie alla @GSee per l'aiuto. Sembra che questo sia in realtà un problema di devtools. Controlla il codice della riga di comando interattivo qui sotto.
Dopo il caricamento della libreria test_package, foo
viene eseguito correttamente:
> foo
function()
{
m <- data.table(c1 = c(1, 2, 3))
print(is.data.table(m))
m[, sum(c1)]
}
<environment: namespace:test_package>
> foo()
[1] TRUE
[1] 6
Esecuzione load_all()
pause foo:
> load_all()
Loading test_package
> foo()
[1] TRUE
Error in `[.data.frame`(x, i, j) : object 'c1' not found
In qualche modo source('R/foo.R')
ravviva funzionalità pippo:
> source('R/foo.R')
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
> foo()
[1] TRUE
[1] 6
E futuri inviti a load_all()
non rompere foo
ancora:
> load_all()
Loading test_package
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
> foo()
[1] TRUE
[1] 6
Inoltre, ho aggiornato a DevTools 1.5 e provato ad aggiungere .datatable.aware=TRUE
, ma che non sembra di fare nulla.
Sei sicuro che il 'foo' nel tuo pacchetto è esattamente lo stesso (cioè non hai lasciato la virgola tra' x ['e' col3'? – BrodieG
Sono uguali. incollato la funzione dal file foo.R (mostrato sopra) nella riga di comando R. – kjmij
Controlla 'yourpackagename :: foo' sulla riga di comando per assicurarti che siano davvero gli stessi. Solo perché il file che vedi sul tuo editor sembra che X non significhi che la funzione nel pacchetto caricato nella sessione R sia la stessa. – BrodieG