2012-04-12 15 views
22

Chciałbym przekazać argument (stringsAsFactors=FALSE) do rbind w do.call. Ale dodaje nie działa:Jak przekazać dodatkowy argument do argumentu funkcji do.call w R

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

rbind ma tylko argument deparse.level (nie stringsAsFactors). –

+0

Co powiesz na wgląd w swoje dane? - Brak wrażliwych informacji, ale minimalny powtarzalny przykład (na przykład 'dput (readLines ("/home/jianfezhang/adoption.txt ", n = 5))') – BenBarnes

Odpowiedz

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

byłaby moja odpowiedź, gdyby nie fakt, że rbind nie wie, co zrobić z stringsAsFactors (ale cbind.data.frame będzie).

Wyjście z strsplit jest prawdopodobnie listą wektorów, w którym to przypadku rbind tworzy macierz. Można określić stringsAsFactors podczas konwersji tej macierzy do data.frame,

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

Nie jestem pewien, czy wywołanie funkcji jest ważny, ale spróbuj tego:

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

Musisz przejść wszystkie argumenty do.call pośrednictwem jednej listy. Można Concat dwa listy przez c

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

[[2]] 
[1] 2 

[[3]] 
[1] 3 

[[4]] 
[1] 4 
5

Alternatywnie, można ustawić stringsAsFactors do FALSE globalnie za pomocą options:

options(stringsAsFactors=FALSE) 

Ustawienie tego na górze skryptu wymusi to przez cały scenariusz. Możesz nawet dodać do .Rprofile, aby ustawić tę opcję dla wszystkich otwartych sesji R.

Powiązane problemy