Как передать дополнительный аргумент аргументу функции 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))
Ответы
Ответ 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