0

以下の2点について教えていただけると助かります。

  1. 以下の「for」ループは、最初のループ項目を無視します。以下のコードは、私のプログラムの一部です。ここでは、オブジェクト 'num' を反復処理し、mySet から特定の項目にフラグを立てる関数 'Grep' を使用して 'mySet' をループしています。

「for」ループは、「num」オブジェクトの最初の要素「0」を除いて機能します。したがって、mySet で「0」で始まるアイテムは見つかりません。

num <- c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100)
mySet <- c("0.C.A", "2.C.A", "4.C.A", "6.C.A", "8.C.A", "10.C.A", "15.C.A", "20.C.A",
           "30.C.A", "40.C.A", "45.C.A", "50.C.A", "55.C.A", "60.C.A", "65.C.A", "70.C.A",
           "80.C.A", "85.C.A", "90.C.A", "92.C.A", "94.C.A", "96.C.A", "98.C.A", "100.C.A")
varLoop <- c()
Grep <- function(num)grep(paste("^" , num, "\\.", sep=""), mySet, value = TRUE)
for(i in num){
    varLoop[i] <- Grep(i)
    print(varLoop[i])}
  1. 2 つ目の問題は、スクリプトを次のように変更すると、不完全な出力と警告が表示されることです。警告は次のとおりです:「置換するアイテムの数は、置換の長さの倍数ではありません」。不完全な出力には、文字 B で終わる項目が含まれていません

以下のスクリプトで問題が発生します。

num <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), 2)
mySet <- c("0.C.A", "2.C.A", "4.C.A", "6.C.A", "8.C.A", "10.C.A", "15.C.A", "20.C.A",
           "30.C.A", "40.C.A", "45.C.A", "50.C.A", "55.C.A", "60.C.A", "65.C.A", "70.C.A",
           "80.C.A", "85.C.A", "90.C.A", "92.C.A", "94.C.A", "96.C.A", "98.C.A", "100.C.A",
           "0.C.B", "2.C.B", "4.C.B", "6.C.B", "8.C.B", "10.C.B", "15.C.B", "20.C.B",
           "30.C.B", "40.C.B", "45.C.B", "50.C.B", "55.C.B", "60.C.B", "65.C.B", "70.C.B",
           "80.C.B", "85.C.B", "90.C.B", "92.C.B", "94.C.B", "96.C.B", "98.C.B", "100.C.B")
varLoop <- c()
Grep <- function(num)grep(paste("^" , num, "\\.", sep=""), mySet, value = TRUE)
for(i in num){
    varLoop[i] <- Grep(i)
    print(varLoop[i])}

前もってありがとう、Ragy Isaac

4

1 に答える 1

8

ではR、インデックス付けは1notから始まります0

x <- 1:5
x[0] 
## integer(0)

慣用的なアプローチは、次のようなことを行い、結果seq_alongにインデックスを付けることです。num

あなたはR 地獄の 2 番目のサークルにいて、ループ内でオブジェクトを成長させています。

私はここで考えますが、何かsapplyがコードを簡素化するのに役立ちます

sapply(num, Grep)
于 2013-03-12T01:17:19.500 に答える