2012-04-12 5 views
22

Ich möchte das Argument (stringsAsFactors=FALSE) an rbind in do.call übergeben. Aber die folgende nicht funktioniert:So übergeben Sie ein zusätzliches Argument an das Funktionsargument von do.call in R

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

rbind hat nur das Argument deparse.level (nicht stringsAsFactors). –

+0

Wie wäre es mit einem Blick auf Ihre Daten? - Keine sensiblen Informationen, bitte, aber ein minimales reproduzierbares Beispiel (zB 'dput (readLines ("/home/jianfezhang/adoption.txt ", n = 5))') – BenBarnes

Antwort

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

wäre meine Antwort gewesen, wenn es nicht für die Tatsache ist, dass rbind nicht weiß, was mit stringsAsFactors zu tun (aber cbind.data.frame würde). Die Ausgabe von strsplit ist vermutlich eine Liste von Vektoren, wobei rbind eine Matrix erstellt. Sie können stringsAsFactors angeben, wenn diese Matrix auf eine data.frame Umwandlung

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

Ich bin mir nicht sicher, ob Ihr Funktionsaufruf gültig ist, aber versuchen Sie dies:

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

Sie müssen alle Argumente zu do.call über eine Liste übergeben. Sie können concat zwei Liste von c

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

[[2]] 
[1] 2 

[[3]] 
[1] 3 

[[4]] 
[1] 4 
5

Alternativ Sie stringsAsFactors zu FALSE global options mit einstellen:

options(stringsAsFactors=FALSE) 

dies des Skripts an der Spitze Einstellung erzwingen dies im gesamten Skript. Sie könnten sogar zu .Rprofile hinzufügen, um diese Option für alle R-Sitzungen festzulegen, die Sie öffnen.

Verwandte Themen