0

リストに新しいメンバーを追加したい。私がそれを行うと、次のようになります。しかし、私が関数でそれをしたいとき、何も変わりません..

> a = list( x=4, y=2)
> a
$x
[1] 4

$y
[1] 2

> a$c = 7
> a
$x
[1] 4

$y
[1] 2

$c
[1] 7

関数を使用して...

> addNew(a)
> a
$x
[1] 4

$y
[1] 2

機能は次のとおりです。

addNew = function(list){
  list$c = 7
}

cのポインタのような問題かもしれませんが、どうすれば解決できますか?

4

2 に答える 2

1

変更されたリストを返して割り当てる必要があります。

a <- list(x=4, y=2)
addNew <- function(l) {
  l$c <- 7
  return(l)
}
a <- addNew(a)

編集:@mitraが述べたように、次を使用できます<<-

a <- list(x=4, y=2)
addNew <- function() {
  a$c <<- 7
}

しかし、それは R の関数の典型的な動作を変更します。ほとんどのユーザーは、関数にグローバル環境の変更などの副作用があるとは予想していませんでした。

Patrick Burns のR Inferno (p. 35)をお読みください。

<<- が必要だと思われる場合は、もう一度考えてみてください。振り返ってみると、まだ <<- が必要だと思う場合は、もう一度考えてみてください。上司があなたが何もしないことに怒って真っ赤になったときだけ、一時的に誘惑に屈してください。言語から <<- を削除するという提案 (冗談半分にすぎません) がありました。それはグローバルな代入を排除するものではなく、代入関数を使用してそれらを達成することを強制するだけです。

于 2013-08-29T07:48:32.167 に答える
0

ローカル変数とグローバル変数の違いを確認する必要があります。

R のグローバル変数とローカル変数

関数内で変数を定義した場合、それは一時的なものであり、関数のみに属します。

これをチェックして:

list$c<<-7
于 2013-08-29T07:58:07.767 に答える