在函数内设置全局变量

时间:2012-12-19 14:21:55

标签: r

我有以下功能:

s_c <- function(n, t){
    r_num <- runif(1,min=0,max=1)
    use <- sample(s[,1],1)
    use2 <- subset(s,s[,1]==use,2)
    use2 <- as.numeric(use2)
    ne_s <- sample(subset(s,s[,2]!=use2,2),1)

    Return(use) 
    if (t>50 & r_num<0.5){
        ne_s
    }
        else 
           0  
}

我实际上想在函数外部的命令中使用函数中创建的变量,所以我想在函数外部引用变量的意义上“返回”

问题2:

如果我想在if语句中进行分配,例如

,该怎么办?
 if (t>50 & r_num<0.5){
        s[,4]=use
    }

可以这样做吗?

2 个答案:

答案 0 :(得分:4)

马修提到的“清单”解决方案:

.....

list(variable1 = VarInFunction,
     variable2 = VarInFunction2)

像这样,当你运行你的功能时,你可以存储它的结果。

Result <- s_c(10,1)

然后您可以特别询问结果:

Result$variable1
Result$variable2

请注意,VarInFunction是在函数中调用的变量,并重命名为variable1(或任何您想要的),并存储在Result中。

答案 1 :(得分:3)

虽然您应该将这两个值作为列表返回,但您可以非常轻松地影响父级环境。

替换它:

Return(use)

用这个:

use <<- use

对于您的编辑,您可以使用以下语法:

s[,4] <<- use

注意:父母的环境&#34;不是调用函数的环境。它是定义函数的环境。出于这个原因,R中的函数被称为闭包。明确地:

s_c <- function() {
  use <<- 1
}

f <- function() {
  use <- 0
  s_c()
  return(use)
}

f()将返回0. s_c()正在修改不同的use变量(在不同的环境中)。