2

「vp」から作成された「vpXmin」と「vpXmax」の 2 つの等しい長さのデータセットがあります。

> head(vpXmin)
                 vp
[1,] 253641 2621722
[2,] 253641 2622722
[3,] 253641 2623722
[4,] 253641 2624722
[5,] 253641 2625722
[6,] 253641 2626722

> head(vpXmax)
                 vp
[1,] 268641 2621722
[2,] 268641 2622722
[3,] 268641 2623722
[4,] 268641 2624722
[5,] 268641 2625722
[6,] 268641 2626722

「rbind」を使用してこれらのデータセットの各行を結合し、個別のマトリックスを作成したいと考えています。例えば

l1<-rbind(vpXmax[1,],vpXmin[1,])
l2<-rbind(vpXmax[2,],vpXmin[2,])
 ... ...

私はRループに慣れていませんが、ループのような大きなデータを扱いたい...しかし、これをしようとして失敗しました:

for (i in 1:length(vp)){rbind(vpXmax[i,],vpXmin[i,])}

理由はありますか?また、R を使用してさまざまな種類のループを学習するための参考文献があれば教えてください。前もって感謝します。

4

2 に答える 2

0

@ToNoy が示すように、必要な出力の種類は明らかではありません。rbind最も簡単な方法は、各要素が2 つの元のデータ フレームの各行の結果であるリストを作成することです。

A <- data.frame("a" = runif(100, -1, 0), "b" = runif(100, 0, 1))                                                                                                                     
Z <- data.frame("a" = runif(100, -2, -1), "b" = runif(100, 1, 2))                                                                                                                    

output <- vector("list", nrow(A))                                                                                                                                                    
for (i in 1:nrow(A)) {                                                                                                                                                               
    output[[i]] <- rbind(A[i, ], Z[i, ])                                                                                                                                             
}                                                                                             
于 2013-08-02T06:05:49.557 に答える
0

たぶん次のようなものです:

vpXmax <- matrix(1:10,ncol=2)
vpXmin <- matrix(11:20,ncol=2)

l <- lapply(1:nrow(vpXmin),function(i) rbind(vpXmax[i,],vpXmin[i,]) )

次に、などの代わりにl1l2

l[[1]]
#     [,1] [,2]
#[1,]    1    6
#[2,]   11   16
l[[2]]
#     [,1] [,2]
#[1,]    2    7
#[2,]   12   17

おそらく理想的ではありませんが、最初のループには大きな問題が 1 つあります。出力を割り当てていないため、実際にオブジェクトを作成するには、assignまたは何らかの方法で使用する必要があります。<-ただし、を使用することは、物事を行うためのより良い方法があり、事前割り当てまたはその他の詰め込みが必要になるassignという警鐘を鳴らすためのフラグです。それにもかかわらず、 ...オブジェクト<-でワークスペースを汚染しても機能します:l1 l2ln

for (i in 1:nrow(vpXmax)) {assign(paste0("l",i), rbind(vpXmax[i,],vpXmin[i,]) )}

> l1
#     [,1] [,2]
#[1,]    1    6
#[2,]   11   16

> l2
#     [,1] [,2]
#[1,]    2    7
#[2,]   12   17
于 2013-08-02T06:06:55.480 に答える