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

おそらく 2 つの値をリストとして返す必要がありますが、親の環境に非常に簡単に影響を与えることができます。

これを置き換えます:

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 に答える