3

Rでは、「assign('x'、v)」は、名前が「x」のオブジェクトをvに設定します。「x」を変数xにテキスト関数を適用した結果に置き換えます。次に、「割り当て」はその価値を示します。

残念ながら、「assign(paste('names('、'x'、')'、sep ='')、v)」は失敗します。したがって、「x」が変数xの場合、その値を設定することはできますが、その要素に名前を付けることはできません。

これを回避できますか?多分解析評価のトリック?ありがとう。

4

4 に答える 4

5

質問するフォームでは、assign名前を付ける必要はありません。あなたxが存在するなら、あなたはそうしますnames(x) <- v。これはこれを行う正しい方法です。

変数名が不明な場合(つまり、動的に作成された場合)、次を使用できますsubstitute

nm <- "xxx" # name of your variable
v <- 1:3 # value
assign(nm,v) # assign value to variable

w <- c("a","b","c") # names of variable
eval(substitute(names(x)<-w, list(x=as.symbol(nm))))
# Result is
str(xxx)
# Named int [1:3] 1 2 3
# - attr(*, "names")= chr [1:3] "a" "b" "c"

しかし、この種のトリックを行う必要がある場合は、コードに何か問題があります。

于 2010-05-25T20:37:21.990 に答える
4

マレクの答えはうまくいきますが、アニコの質問は単純な答えです。

nm <- "xxx"; v<- 1:3; names(v) <- c("a","b","c"); assign(nm,v)

これはアニコの答えです、彼女は信用を得るべきです。

私がこれを使用するケースには、1つを超えるクラスのクエリがあり、それぞれに異なるvarnameがあり、各クラスには1つを超えるSQLクエリが含まれています。たとえば、「config_query」というクエリクラス名で、リストに3つの名前付きクエリが含まれているとします。たとえば、「q1」、「q2」、「q3」などです。さらに、クラス名を照会します。クエリクラス名のルートプレフィックス(「config_query」の「config」など)をリストとして取得し、クエリコンテンツを取得してクエリを実行し、結果データフレームを結果クラスvarnamesにリストするループを作成したいと思います。 「config_result」など、「config_result」の各結果が、結果である「config_query」のクエリと同じ名前になるようにします。

別の言い方をすれば、ルートプレフィックスと初期クエリを指定して、結果クラスの変数名と対応する名前のマッピングを無料で提供したいと考えています。assign()を使用すると、結果クラスのvarnamesに割り当てられます。名前のマッピングを行う方法に固執しました。ありがとう!

于 2010-05-28T02:51:09.437 に答える
4

これを試して:

assign(paste(names(x),collapse="."), v)

collapse複数の名前がある場合は代わりに使用します。

> v <- 1:10
> names(v) <- letters[1:10]
> v
 a  b  c  d  e  f  g  h  i  j 
 1  2  3  4  5  6  7  8  9 10 
> assign(paste(names(v), collapse=""), v)
> abcdefghij
 a  b  c  d  e  f  g  h  i  j 
 1  2  3  4  5  6  7  8  9 10
于 2010-05-25T19:52:28.603 に答える
0

変数の名前が他の変数 (variable_name) に文字列として格納されている場合は、次のようにします。

temp <- get(variable_name)

names(temp)<- array_of_names

assign(variable_name,temp)
于 2014-06-05T19:18:39.353 に答える