R-Errore: data_frames può contenere solo 1d atomica vettori e liste

Sto cercando di applicare il dplyr pacchetto e calcolare il numero di voci per ogni numero di carta in un set di dati con la seguente funzione:

freq<- function(data){
  data <- complete.dupremoved[order(-complete.dupremoved$SUMMA),]
  aggregate(count ~., data=transform(complete.dupremoved,count=1), length)
  complete.dupremoved$count <-complete.dupremoved[complete.dupremoved$KLIENDIKAARDINR,]
  sample <- count(complete.dupremoved, vars = "KLIENDIKAARDINR")
  complete.dupremoved<- merge(complete.dupremoved,sample, by ="KLIENDIKAARDINR")
  return(complete.dupremoved)
}

Mostrato l’errore è Errore: data_frames può contenere solo 1d atomica vettori e liste.

Quando faccio l’ :
lapply(completo.dupremoved,classe)

Alcune colonne sono numerici , fattori , carattere , intero. Qualsiasi soluzione come risolvere questo problema?
Anche il debugger ha pronunciato la seguente:

function (x) 
{
    stopifnot(is.list(x))
    if (length(x) == 0) {
        x <- list()
        class(x) <- c("tbl_df", "tbl", "data.frame")
        attr(x, "row.names") <- .set_row_names(0)
        return(x)
    }
    names_x <- names2(x)
    if (any(is.na(names_x) | names_x == "")) {
        stop("All columns must be named", call. = FALSE)
    }
    ok <- vapply(x, is_1d, logical(1))
    **if (any(!ok)) {
        stop("data_frames can only contain 1d atomic vectors and lists", 
            call. = FALSE)**
    }
    n <- unique(vapply(x, NROW, integer(1)))
    if (length(n) != 1) {
        stop("Columns are not all same length", call. = FALSE)
    }
    class(x) <- c("tbl_df", "tbl", "data.frame")
    attr(x, "row.names") <- .set_row_names(n)
    x
}
Si può dare un piccolo esempio di vostri dati per riprodurre l’errore?
‘fattore’-vettori non sono atomica.
ma is.atomic(factor("a")) restituisce TRUE..?
Credo di essere confuso. Ho pensato di vettori con extra attributi non sono stati “atomica”. Si noti che is.vector( factor("a") ) restituisce [1] FALSE. Dopo questa citazione dalla ?is.atomic pagina: “è comune a chiamare il tipo atomico atomica vettori’, ma è da notare che è.vettore impone ulteriori restrizioni: un oggetto può essere atomica, ma non un vettore (in questo senso).” Dichiaro di modificare il mio commento al “fattori non sono atomica vettori”.
interessante. Anche io ho appena imparato che è impossibile fare vector(mode = "factor", 0). Comunque, per quanto riguarda il messaggio di errore, è probabilmente non è legato a fattori, poiché data_frame(x = factor(1)) è consentito.

InformationsquelleAutor Prashanth | 2015-12-23

One Reply
  1. 7

    Il motivo di questo errore è che la funzione è la creazione di un dataframe come una variabile all’interno di originale dataframe. Questa è la linea che fa:

    complete.dupremoved$count <-complete.dupremoved[complete.dupremoved$KLIENDIKAARDINR,]

    In futuro, si può controllare il dataframe con questo per identificare la classe di ogni variabile:

    sapply(your_df_here, class)

    La domanda principale a parte, spero che tu fossi in grado di calcolare le voci di un fattore. Ci sono diverse opzioni esistenti.

    InformationsquelleAutor Simon

Lascia un commento