0

「A」、「B」、「C」など、いくつかの可能な値を含むこのfeature_listがあります。そして、time_listには時間があります。

したがって、これらの異なる値のそれぞれを調べて、それを数式に入れたいループがあります。

とのようなものfor(i in ...)と。my_feature <- feature_list[i]my_time <- time_list[i]

次に、時間と選択した機能をデータフレームに入れて、回帰に使用します

feature_list<- c("GPRS")
time_list<-c("time")
calc<-0

feature_dim <- length(feature_list)
time_dim <- length(time_list)

data <- read.csv("data.csv", header = TRUE, sep = ";")
result <- matrix(nrow=0, ncol=5)
errors<-matrix(nrow=0, ncol=3)

for(i in 1:feature_dim) {
    my_feature <- feature_list[i]
    my_time <- time_list[i]

    fitdata <- data.frame(data[my_feature], data[my_time])

    for(j in 1:60) {

        my_b <- 0.0001 * (2^j)

        for(k in 1:60) {
            my_c <- 0.0001 * (2^k)
            cat("Feature: ", my_feature, "\t")
            cat("b: ", my_b, "\t")
            cat("c: ", my_c, "\n")

            err <- try(nlsfit <- nls(GPRS ~ 53E5*exp(-1*b*exp(-1*c*time)), data=fitdata, start=list(b=my_b, c=my_c)), silent=TRUE)
            calc<-calc+1

            if(class(err) == "try-error") {
                next
            }

            else {
                coefs<-coef(nlsfit)
                ess<-deviance(nlsfit)
                result<-rbind(result, c(coefs[1], coefs[2], ess, my_b, my_c))
            }
    }
} 
}

呼び出しでは、nls()「A」や「B」などの代わりにmy_featureを呼び出してから、リストの次の文字を呼び出すことができるようにしたいと思います。しかし、そこでエラーが発生します。私は何が間違っているのですか?

4

2 に答える 2

2

貼り付けを使用して、必要な変数名を含む数式の文字列バージョンを作成し、as.formulaまたはformula関数を使用してこれを数式に変換し、nlsに渡すことができます。

as.formula(paste(my_feature, "~ 53E5*exp(-1*b*exp(-1*c*time))"))

もう1つのオプションは、bquote関数を使用して変数名を関数呼び出しに挿入してから、関数呼び出しを評価することです。

于 2010-09-16T15:51:20.017 に答える
0

私はしばらく前にRと仕事をしました、多分あなたはこれを試してみることができます:

必要なのは、変数のリストを使用して数式を作成することです。

したがって、応答変数がリストの最初の要素であり、他の要素が説明変数である場合は、次の方法で数式を作成できます。

my_feature [0] 〜reduce( "+"、my_feature [1:])。これはうまくいくかもしれません。

このようにして、my_featuresの変数に依存する式を作成できます。

于 2010-09-16T12:21:03.337 に答える