是否可以通过对或类似功能以某种方式做这样的事情?
var = "" #initialization
panel.pearson <- function(x, y, ...) {
horizontal <- (par("usr")[1] + par("usr")[2]) / 2;
vertical <- (par("usr")[3] + par("usr")[4]) / 2;
cor = cor.test(x,y)
cor.p = cor$p.value
cor.r = cor$estimate
cor.p = round(cor.p, digits = 2)
cor.r = round(cor.r, digits = 2)
stars = ifelse(cor.p < .001, "***", ifelse(cor.p < .01, "** ", ifelse(cor.p < .05, "* ", " ")))
format_r_p = paste(cor.r, stars, sep="")
text(horizontal, vertical, format_r_p, cex=2)
var = c(var, format_r_p)
}
pairs(crime, upper.panel=panel.pearson )
var
会输出所有format_r_p
值。
答案 0 :(得分:1)
这是可能的,但总的来说这是一个非常非常糟糕的主意:函数不应该改变全局状态。
相反,将修改隔离为本地而不是全局:
var = ''
pairs(crime, upper.panel = function (x, y, ...) {
result = panel.pearson(x, y, ...)
var <<- c(var, result)
result
})
现在,我们不是让panel.pearson
修改任何全局魔术变量,而是在pairs
调用的范围中使用匿名函数来修改变量在pairs
调用的范围中,即本地。
要从匿名函数内部修改此变量,我们使用<<-
而不是正常的赋值。