使用配对时是否可以保存变量值?

时间:2014-05-13 20:54:05

标签: r

是否可以通过对或类似功能以某种方式做这样的事情?

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值。

1 个答案:

答案 0 :(得分:1)

这是可能的,但总的来说这是一个非常非常糟糕的主意:函数不应该改变全局状态。

相反,将修改隔离为本地而不是全局:

var = ''
pairs(crime, upper.panel = function (x, y, ...) {
    result = panel.pearson(x, y, ...)
    var <<- c(var, result)
    result
})

现在,我们不是让panel.pearson修改任何全局魔术变量,而是在pairs调用的范围中使用匿名函数来修改变量pairs调用的范围中,即本地。

要从匿名函数内部修改此变量,我们使用<<-而不是正常的赋值。