我想创建一个R脚本来生成一个简单的散点图,将列作为参数传递给绘图。
这就是我现在正在做的事情:
ds <- read.csv("filename", sep=";")
args<-commandArgs(TRUE)
x <- args[1]
y <- args[2]
output <- args[3]
png(output)
plot(ds$x, ds$y)
dev.off()
然后我以这种方式启动脚本:
Rscript myscript.R arg1 arg2 output.png
,
但我暂停了执行,因为它无法获取任何数据。
如果我在绘图功能中使用了正确的列名(已经阅读了列标题离线),那么当然效果很好。
如果我要求typeof(ds$x)
我得到NULL,那么问题似乎是args
的类型不正确;我做错了什么?
答案 0 :(得分:2)
ds$y
和ds$x
无法使用此格式,因为x和y是字符。
如果您尝试使用控制台:
x <- 'arg1'
> ds$x
NULL
你会看到它不起作用并返回NULL。
因此请尝试:
ds <- read.csv("filename", sep=";")
args<-commandArgs(TRUE)
x <- args[1]
y <- args[2]
output <- args[3]
png(output)
plot(ds[,x], ds[,y])
dev.off()
答案 1 :(得分:1)
你是对的,问题在于x和y的类型。添加
cat(class(x),"\n")
到您的脚本,您会看到x的类型是字符。因此,将绘图调用更改为
plot(get(x,ds),get(y,ds))
它有效。