1

最小限の作業例を考えてみましょう (たとえば、二項モデルの場合):

test.a.tset <- rnorm(10)
test.b.tset <- rnorm(10)
c <- runif(10)
c[c < 0.5] <- 0
c[c >= 0.5] <- 1
df <- data.frame(test.a.tset,test.b.tset,c)

c正規表現を使用して、構造を持つすべての変数を回帰したいtest."anything".tset:

summary(glm(paste("c ~ ",paste(colnames((df[, grep("test\\.\\w+\\.tset", colnames(df))])),
        collapse = "+"), sep = ""), data = df, family=binomial))

これまでのところ、問題はありません。ここで、重要な部分に到達しcbindます。入力として計画行列を必要とする別の統計モデル (パッケージなど)rbprobitGibbsを使用したいとします。bayesmしたがって、データ フレームを適切な形式に変換する必要があります。

X <- cbind(df$test.a.tset,df$test.b.tset)

または、代わりに、正規表現を再度使用したい場合 (grep引用符内の部分のみが選択されるように 1 秒を追加することもできます):

X2 <- cbind(grep("[^\"]+",paste(paste("df$", colnames((df[, grep("test\\.\\w+\\.tset", colnames(df))])), 
            sep = ""), collapse = ","), value = TRUE))

しかし、違いがあります:

> X
            [,1]         [,2]
 [1,] -0.4525601 -1.240484170
 [2,]  0.3135625  1.240519383
 [3,] -0.2883953 -0.554670224
 [4,] -1.3696994 -1.373690426
 [5,]  0.8514529 -0.063945537
 [6,] -1.1804205 -0.314132743
 [7,] -1.0161170 -0.001605679
 [8,]  1.0072168  0.938921869
 [9,] -0.8797069 -1.158626865
[10,] -0.9113297  1.641201924
> X2
     [,1]                        
[1,] "df$test.a.tset,df$test.b.tset"

私の観点からgrepは、選択した値を引用符内の文字列として返す問題とglm、 の引用符を無視するのと同じように"df$test.a.tset,test.b.tset"、そうしないことが問題のようcbindです。つまり、貼り付け後の X2 の呼び出しは、実際には次のように読み取られます。

X2 <- cbind("df$test.a.tset,df$test.b.tset")

質問:正規表現X2を使用した場合と同じ結果を得る方法はありますか?X

4

1 に答える 1

1

コードgrep("test\\.\\w+\\.tset", colnames(df))は、パターンに一致する列のインデックスを返します。これらの列だけを使用してマトリックスを作成する場合は、次を使用できます。

X3 <- as.matrix(df[,grep("test\\.\\w+\\.tset", colnames(df))])
于 2014-03-25T13:58:06.637 に答える