2017-10-26 10 views
1

連続した名前を持つベクトルを積み重ねたい。例えばR、連続した名前を持つベクトルを結合する

、私はとしての100、A1、A2、A3を、持っている場合、私はあなた

z<-as.vector(rbind(a1,a2,a3)) 

は、私はこれをどのように行うことができます可能性があることを知って

a1<-1:3 
a2<-4:6 
a3<-7:9 

を持っています... 、a100?

ありがとうございました!

+1

予想される出力は何ですか? –

答えて

1

get()を使用して変数にアクセスできます。 、その後のようになりますあなたの例は、次のとおりです。

a_list <- list() 
for(i in 1:3){ 
    a_list[[i]] <- get(paste0("a",i)) 
} 

z <- as.vector(do.call("rbind",a_list)) 

またはlapply使用して:あなたは、この例を行うことができ

as.vector(do.call("rbind",lapply(1:3,function(x){get(paste0("a",x))}))) 

i in 1:100または必要なものは

1

mgetを使用できます。次の結果は、exmpleコードと同じ出力です。 1:31:100に変更することができます。あるいは非公開に(LST -

as.vector(matrix(unlist(mget(paste0("a", 1:3))), ncol = 3, byrow = TRUE)) 
[1] 1 4 7 2 5 8 3 6 9 
+0

ニース、私は 'mget'を知らなかった。 –

0

あなたがリストのメンバーとしてそれらすべてを持っていた場合は 'LST'、あなたは、単に(rbind、LST)、またはdo.call(C、LST)do.callを呼び出すことができます)。そのトリックは、変数をリストに入れることです。 'ls'を使用して、必要な変数の名前を返してから、それらの名前にmgetを使うことができます:

do.call(c、mget(ls(pattern = "a [0-9] + ")))

パターンは、グローバル環境でa123という形式のすべての変数を検索する正規表現です。

+0

ありがとうございました。私がこれを行うとき、「何が関数か文字列でなければならない」メッセージが出てきました。もう少し手伝ってもらえますか? –

+0

'c'は通常は関数なので、再定義した可能性がありますか? do.call(rbind、...)を試して、それがうまくいくかどうか確認してください。 –

関連する問題