1

我有以下功能:

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
    }

这可以做到吗?

4

2 回答 2

4

马修提到的“列表”解决方案:

......

list(variable1 = VarInFunction,
     variable2 = VarInFunction2)

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

Result <- s_c(10,1)

然后,您可以具体询问结果,例如:

Result$variable1
Result$variable2

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

于 2012-12-19T14:33:27.533 回答
3

尽管您可能应该将这两个值作为列表返回,但您可以很容易地影响父级的环境。

替换这个:

Return(use)

有了这个:

use <<- use

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

s[,4] <<- use

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

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

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

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

于 2012-12-19T14:27:14.493 回答