Подтвердить что ты не робот

Как передать дополнительный аргумент аргументу функции do.call в R

Я хотел бы передать аргумент (stringsAsFactors=FALSE) в rbind в do.call. Но следующее не работает:

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

Ответ 1

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

был бы моим ответом, если бы не тот факт, что rbind не знает, что делать с stringsAsFactors (но cbind.data.frame).

Вывод strsplit является, по-видимому, списком векторов, и в этом случае rbind создает матрицу. Вы можете указать stringsAsFactors при преобразовании этой матрицы в data.frame,

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

Ответ 2

В качестве альтернативы вы можете установить stringsAsFactors на FALSE глобально, используя options:

options(stringsAsFactors=FALSE)

Установка этого в верхней части script обеспечит выполнение этого во всех script. Вы можете даже добавить к .Rprofile, чтобы установить этот параметр для всех открываемых сеансов R.

Ответ 3

Я не уверен, что ваш вызов функции действителен, но попробуйте следующее:

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

Вам нужно передать все аргументы в do.call через один список. Вы можете выполнить два списка с помощью c

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

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4