2012-04-12 11 views
22

Vorrei passare l'argomento (stringsAsFactors=FALSE) a rbind in do.call. Ma il seguente non funziona:Come passare argomento aggiuntivo all'argomento della funzione do.call in R

data <- do.call(rbind, 
      strsplit(readLines("/home/jianfezhang/adoption.txt"), split="\t#\t"), 
      args=list(stringsAsFactors=FALSE)) 
+1

rbind ha solo argomento deparse.level (non stringheAsFactors). –

+0

Che ne dici di dare un'occhiata ai tuoi dati? - Nessuna informazione sensibile, per favore, ma un esempio riproducibile minimo (ad esempio, 'dput (readLines ("/home/jianfezhang/adoption.html ", n = 5))') – BenBarnes

risposta

18
do.call(rbind.data.frame, c(list(iris), list(iris), stringsAsFactors=FALSE)) 

sarebbe stata la mia risposta, se non fosse per il fatto che rbind non sa cosa fare con stringsAsFactors (ma cbind.data.frame sarebbe).

L'output di strsplit è presumibilmente un elenco di vettori, nel qual caso rbind crea una matrice. È possibile specificare stringsAsFactors quando si converte questa matrice a un data.frame,

data.frame(do.call(rbind, list(1:10, letters[1:10])), stringsAsFactors=FALSE) 
1

non sono sicuro se la chiamata di funzione è valida, ma provate questo:

data <- do.call(rbind, 
    c(strsplit(readLines("/home/jianfezhang/adoption.txt"),split="\t#\t"), 
    list(stringsAsFactors=FALSE)) 

È necessario passare tutti gli argomenti a do.call tramite una lista. È possibile concat lista di secondo da c

> c(list(1, 2), list(3, 4)) 
[[1]] 
[1] 1 

[[2]] 
[1] 2 

[[3]] 
[1] 3 

[[4]] 
[1] 4 
5

In alternativa, è possibile impostare stringsAsFactors a FALSE utilizzando globalmente options:

options(stringsAsFactors=FALSE) 

L'impostazione di questo nella parte superiore dello script applicherà questo in tutta la sceneggiatura. Puoi anche aggiungere a .Rprofile per impostare questa opzione per tutte le sessioni R che apri.

Problemi correlati