vars
以下の最小限の例では、回帰式で文字列の値を使用しようとしています。ただし、変数名の文字列 ("v2+v3+v4") を式に渡すことしかできず、この文字列の本当の意味を渡すことはできません (たとえば、"v2" は dat$v2 です)。
回帰を実行するためのより良い方法があることは知っています (例: lm(v1 ~ v2 + v3 + v4, data=dat)
)。私の状況はもっと複雑で、数式で文字列を使用する方法を理解しようとしています。何かご意見は?
以下のコードを更新
# minimal example
# create data frame
v1 <- rnorm(10)
v2 <- sample(c(0,1), 10, replace=TRUE)
v3 <- rnorm(10)
v4 <- rnorm(10)
dat <- cbind(v1, v2, v3, v4)
dat <- as.data.frame(dat)
# create objects of column names
c.2 <- colnames(dat)[2]
c.3 <- colnames(dat)[3]
c.4 <- colnames(dat)[4]
# shortcut to get to the type of object my full code produces
vars <- paste(c.2, c.3, c.4, sep="+")
### TRYING TO SOLVE FROM THIS POINT:
print(vars)
# [1] "v2+v3+v4"
# use vars in regression
regression <- paste0("v1", " ~ ", vars)
m1 <- lm(as.formula(regression), data=dat)
更新: @Arun はv1
、最初の例の "" の欠落については正しかったです。これで私の例は修正されましたが、実際のコードにはまだ問題がありました。以下のコード チャンクでは、実際のコードをよりよく反映するように例を調整しました。問題は string にあると最初は考えて、より単純な例を作成することにしましたvars
。
うまくいかない例を次に示します:)dat
上記で作成したものと同じデータ フレームを使用します。
dv <- colnames(dat)[1]
r2 <- colnames(dat)[2]
# the following loop creates objects r3, r4, r5, and r6
# r5 and r6 are interaction terms
for (v in 3:4) {
r <- colnames(dat)[v]
assign(paste("r",v,sep=""),r)
r <- paste(colnames(dat)[2], colnames(dat)[v], sep="*")
assign(paste("r",v+2,sep=""),r)
}
# combine r3, r4, r5, and r6 then collapse and remove trailing +
vars2 <- sapply(3:6, function(i) {
paste0("r", i, "+")
})
vars2 <- paste(vars2, collapse = '')
vars2 <- substr(vars2, 1, nchar(vars2)-1)
# concatenate dv, r2 (as a factor), and vars into `eq`
eq <- paste0(dv, " ~ factor(",r2,") +", vars2)
問題は次のとおりです。
print(eq)
# [1] "v1 ~ factor(v2) +r3+r4+r5+r6"
regression
最初の例とは異なりeq
、列名 (例: ) は取り込まれませんv3
。オブジェクト名 ( などr3
) は保持されます。そのため、次のlm()
コマンドは機能しません。
m2 <- lm(as.formula(eq), data=dat)