函数pairs()产生所有p x p对变量的p散点图。
x<-rnorm(100,0,1)
y<-rnorm(100,0,1)
z<-rnorm(100,1,1)
t<-rnorm(100,2,10)
dd<-cbind(x,y,z,t)
pairs(dd)
但我希望能够选择网格的“线”和列。例如,绘制这些对(x,y)(x,z)(t,y)(t,z)。是否有一个接受像(x + t)〜(z + y)这样的公式的函数?
答案 0 :(得分:0)
您可以使用pairs
的特定参数,也可以创建一个接受公式作为输入的自定义函数:
pairs(dd, horInd=c(1, 4), verInd=c(2,3))
自定义功能:
my_pairs <- function(df, formula) {
form <- deparse(formula)
s <- strsplit(form, "~")
lhs <- trimws(unlist(strsplit(s[[1]][1], "\\+")))
rhs <- trimws(unlist(strsplit(s[[1]][2], "\\+")))
lhs.ind <- match(lhs, colnames(df))
rhs.ind <- match(rhs, colnames(df))
all_cmbs <- expand.grid(lhs.ind, rhs.ind)
rows <- all_cmbs[,1]
cols <- all_cmbs[,2]
par(mfrow=c(2,2))
for(i in 1:4) {
eval(substitute(plot(df[,rows[i]], df[,cols[i]],
xlab=colnames(df)[rows[i]],
ylab=colnames(df)[cols[i]])))
}
}
my_pairs(dd, x + t ~ y + z)