我有以下代码
frame()
Y = read.table("Yfile.txt",header=T,row.names=NULL,sep='')
X = read.table("Xfile.txt",header=F,sep='')
plot(Y$V1~X$V1,pch=20,xlim=c(0,27))
par(new=T)
plot(Y$V1~X$V2,pch=20,xlim=c(0,27),col='red')
par(new=T)
plot(Y$V1~Y$V3,pch=20,xlim=c(0,27),col='blue')
par(new=T)一切都很好,我在同一幅图上得到了这3幅图。但是,当我想将X$V1、X$V2和X$V3除以标准化数据时,
plot(Y$V1~X$V1/Y$V2,pch=20,xlim=c(0,27))
par(new=T)
plot(Y$V1~X$V2/Y$V2,pch=20,xlim=c(0,27),col='red')
par(new=T)
plot(Y$V1~Y$V3/Y$V2,pch=20,xlim=c(0,27),col='blue')
par(new=T) 我明白
点击返回查看下一个情节:
而这些图表不能在同一个情节中显示。有人能告诉我发生了什么事以及如何解决吗?
发布于 2011-02-10 11:47:32
如果要在公式中使用算术操作,则必须使用I()函数。所以
plot(Y$V1~I(X$V1/Y$V2),pch=20,xlim=c(0,27))
par(new=T)
plot(Y$V1~I(X$V2/Y$V2),pch=20,xlim=c(0,27),col='red')
par(new=T)
plot(Y$V1~I(Y$V3/Y$V2),pch=20,xlim=c(0,27),col='blue')
par(new=T) 很管用。
下面的帮助页指向formula
为了避免这种混淆,函数I()可以用来对模型公式中的那些部分进行括号,在这些部分中,操作符都是在算术意义上使用的。例如,在公式y ~ a + I(b+c)中,术语b+c被解释为b和c之和。
编辑。您可以在一个命令中不使用公式来完成这个任务:
plot(c(X$V1/Y$V2, X$V2/Y$V2, Y$V3/Y$V2), rep(Y$V1, 3),
pch=20, xlim=c(0,27),
col=rep(c("black", "red", "blue"), each=30)
)发布于 2011-02-10 11:36:07
我不知道为什么会出现错误,但是对于第二个和第三个图,使用points而不是plot是一个更优雅的解决方案(并消除了那些par调用)
https://stackoverflow.com/questions/4956544
复制相似问题