-8

Rでループを記述しようとしていますが、新しいオブジェクトを作成しないため、命名法が正しくないと思います。これは、私がやろうとしていることの簡単な例です:

for i in (1:8) {

List_i <-List
colsToGrab_i <-grep(predefinedRegex_i, colnames(List_i$table))
List_i$table <-  List_i$table[,predefinedRegex_i]
}

grep が検索に使用する 'predefinedRegex'es 1:8 を作成しました。ループは「List_i」というオブジェクトを作成し、「predefinedRegex_i」を見つけることができません。

「i」と $ を i の前に引用符で囲んでみましたが、 [i] も機能しません。

どんな助けでも大歓迎です。ありがとうございました。

#

以下の@RyanGrammelの回答を使用::

#CREATING regular expressions for grabbing sets groups 1 -7 ::::
g_1 <- "DC*"
g_2 <- "BN_._X.*"
g_3 <- "BN_a*"
g_4 <- "BN_b*"
g_5 <- "BN_a_X.*"
g_6 <- "BN_b_X.*"
g_7 <- "BN_._Y.*"

for i in (1:8) 
{
assign(x = paste("tableA_", i, sep=""), value = BigList$tableA)
assign(x = paste("Forgrep_", i, sep=""), value = colnames(get(x = paste("tableA_", i, sep=""))))
assign(x = paste("grab_", i, sep=""), value = grep((get(x = paste("g_",i, sep=""))), (get(x = paste("Forgrep_",i, sep="")))))
assign(x = paste("tableA_", i, sep=""), value = BigList$tableA[,get(x = paste("grab_",i, sep=""))])
}

このループは、「BigList」内のテーブルごとに繰り返されます。(get(x = paste("BigList_", i, "$tableA" sep="")))) から列名を抽出できないことがわかりました

または from (get(x = paste("BigList_", i, "[[2]]" sep="")))) なので、最初にテーブルを抽出する方が簡単でした。ここで、リストを再パックするループを作成します。

4

1 に答える 1

2

問題

あなたの構文はオフです: R が変数名をどのように扱うかを正確に理解していないようです。

for(i in 1:10) name_i <- 1

上記のコードは、name_1、name_2、....、name_10 を割り当てません。「name_i」を何度も割り当てます

  • リストを作成するには、List ではなく「list()」を呼び出します

  • ループ内で変数 List_i を作成しても、List_1、List_2、...、List_8 は割り当てられません。

'List_i' という名前に空のリストを繰り返し割り当てます。考えてみてください。Rがあなたが試みた方法で変数に名前を付ける場合、変数にL1st_1、L2st_2という名前を付ける可能性は同じです...有効なRコードについては、「解決策」を参照してください

  • 「predefinedRegex_i」は、変数「predefinedRegex_1」、「predefinedRegex_2」などを取得する試みとして解釈されません。

ただし、 get(paste0("predefinedRegex_", i)) はこのように解釈されます。これを使用するときは、実際に値があることを確認してください。下記参照。

解決:

一般に、これを使用して動的に変数を割り当てます (List_1、List_2、..)

assign(x = paste0("prefix_", i), value = i)

iが 199 に等しい場合、このコードは変数 prefix_199 に値 199 を割り当てます。

通常、これを使用して、上記のコード スニペットを使用して割り当てた変数を動的に取得します。

get(x = paste0("prefix_", i))

iが 199 の場合、このコードは変数 prefix_199 を取得します。

これで問題の核心は解決するはずです。さらにサポートが必要な場合は、こちらでお気軽に説明を求めるか、Twitter フィードからご連絡ください。

于 2012-09-04T08:01:04.590 に答える