43 votes

Comment passer un argument supplémentaire à l'argument de fonction de do.call dans R

J'aimerais passer l'argument ( stringsAsFactors=FALSE ) à rbind en do.call . Mais ce qui suit ne fonctionne pas :

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

32voto

baptiste Points 19677
do.call(rbind.data.frame, c(list(iris), list(iris), stringsAsFactors=FALSE))

aurait été ma réponse, s'il n'y avait pas eu le fait que rbind ne sait pas quoi faire avec stringsAsFactors (mais cbind.data.frame ).

La sortie de strsplit est vraisemblablement une liste de vecteurs, auquel cas rbind crée une matrice. Vous pouvez spécifier stringsAsFactors lors de la conversion de cette matrice en data.frame,

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

7voto

Paul Hiemstra Points 28390

Vous pouvez également définir stringsAsFactors a FALSE globalement en utilisant options :

options(stringsAsFactors=FALSE)

Le fait de définir ce paramètre au début du script permet de l'appliquer à l'ensemble du script. Vous pourriez même ajouter à .Rprofile pour définir cette option pour toutes les sessions R que vous ouvrez.

4voto

kohske Points 30437

Je ne suis pas sûr que votre appel de fonction soit valide, mais essayez ceci :

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

Vous devez transmettre tous les arguments à do.call via une liste. Vous pouvez concaténer deux listes par c

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

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X