9

簡単な質問。Rで次のように機能するのはなぜですか(変数値「Hello」をベクトルの最初の要素に正しく割り当てます)。

> a <- "Hello"
> b <- c(a, "There")
> b
[1] "Hello" "There"

そしてこれは機能します:

> c <- c("Hello"=1, "There"=2)
> c
Hello There 
    1     2 

しかし、これはそうではありません(ベクトル要素名を「Hello」ではなく「a」に等しくします):

> c <- c(a=1, "There"=2)
> c
    a There 
    1     2 

ステートメントでaの値を使用したいことをRに認識させることは可能c <- c(a=1, "There"=2)ですか?

4

2 に答える 2

8

c()名前付きオブジェクトからnames属性を内部的に作成する方法がわかりません。おそらくそれはとの線に沿っていlist()ますunlist()か?とにかく、次のように、最初にベクトルの値を割り当て、後でnames属性を割り当てることができます。

a <- "Hello"
b <- c(1, 2)
names(b) = c(a, "There")
b
# Hello There 
#     1     2 

次に、名前付き要素に後でアクセスするには:

b[a] <- 3
b
# Hello There 
#     3     2 
b["Hello"] <- 4
b
# Hello There 
#     4     2
b[1] <- 5
b
# Hello There 
#     5     2

編集

本当にすべてを1行で実行したい場合は、次のように機能します。

eval(parse(text = paste0("c(",a," = 1, 'there' = 2)")))
# Hello there 
# 1     2 

eval(parse())ただし、アプローチに個別に値と名前を割り当てる方がよいと思います。

于 2012-05-18T14:49:18.083 に答える
0

名前付きリストに値を割り当てます。次に、リストから外します。例えば

lR <-list( "a" = 1、 "There" = 2)

v = unlist(lR)

これにより、名前付きベクトルvが得られます

v

a There 
1     2 
于 2014-10-01T16:49:48.270 に答える