0
これは私が得たいものですが、関数内のすべての変数の前に "e $"を追加しないでください。おかげ関数内で生成されたすべての変数を(同時に)グローバル環境に割り当てる方法はありますか?
e <- globalenv()
f <- function(P) {
e$c <- P + 1
e$d <- c + 2
}
f(2)
これは私が得たいものですが、関数内のすべての変数の前に "e $"を追加しないでください。おかげ関数内で生成されたすべての変数を(同時に)グローバル環境に割り当てる方法はありますか?
e <- globalenv()
f <- function(P) {
e$c <- P + 1
e$d <- c + 2
}
f(2)
それは非常に悪い考えですが、あなたははそれも(むしろ重要)関数名ですので、私は変数c
を使用していない
f <- function(P) {
x <<- P + 1
y <<- x + 2
}
f(2)
を行うことができます。そして、それは確かに失敗するでしょう。
あなたが別の関数(f2
)に最初の関数(f1
)によって返された複数の値を渡す必要がある場合、何をやるべきことのようなものです:
f1 <- function(P) {
x <- P + 1
y <- x + 2
list(x=x, y=y)
}
f2 <- function(x, y) {
x + y
}
r <- f1(2)
f2(r$x, r$y)
または
r <- f1(2)
do.call(f2, r)
感謝RobertH、私はこれを知っていますが、他にも解決策がありますか? – Tam
あなたのスクリプトは変数の名前としてxとyを使っていますが、名前がcとdのときはエラーがあります:f(2)のエラー: 'c'のロックされたバインディングの値を変更できません。なぜか分からない。 – Tam
申し訳ありませんRobertH、私はRに少し自信がありますが、なぜ悪い考えですか? 1つの関数から1つ以上の変数を返すのが最善の戦略ですか? – Tam