Преобразование аргументов командной строки R в целочисленные векторы

Я хочу прочитать аргументы командной строки от R до Rscript и использовать хранящиеся в них значения для некоторых целочисленных операций. По умолчанию аргументы командной строки импортируются как символы:

#!/usr/bin/env Rscript
arg <- commandArgs(trailingOnly = TRUE)
x = as.vector(arg[1])
class(x)
x
y = as.vector(arg[2])
class(y)
y
cor.test(x,y)

Это вывод этого скрипта:

$ Rscript Correlation.R 3,3,2 4,8,6
[1] "character"
[1] "3,3,2"
[1] "character"
[1] "4,8,6"
Error in cor.test.default(x, y) : 'x' must be a numeric vector
Calls: cor.test -> cor.test.default
Execution halted

Как я могу преобразовать x и y в числовые векторы?


person Piyush Shrivastava    schedule 22.03.2016    source источник


Ответы (2)


вы можете попробовать strsplit и as.integer() или as.numeric()?

#!/usr/bin/env Rscript
arg <- commandArgs(trailingOnly = TRUE)
x = as.integer(strsplit(arg[1], ",")[[1]])
class(x)
x
y = as.integer(strsplit(arg[2], ",")[[1]])
class(y)
y
cor.test(x,y)
person Jean Lescut    schedule 22.03.2016

Учитывая x <- "3,3,2"

Очевидно, вы можете разделить персонажа по критерию , и привести его к numeric.

as.numeric(strsplit(x,",")[[1]])

Другой подход состоит в том, чтобы оценить это строковое выражение, как если бы оно было частью инструкции. Я бы не назвал это решение более умным в данной ситуации, но упомянуть его все же стоит.

eval(parse(text=paste("c(",x,")",sep="")))
person Vongo    schedule 22.03.2016