私は長い間解決策を探していましたが、それでもうまくいきませんでした。私はすべての有益な提案にとても感謝しています!
Rで区分線形関数を定義しようとしています。これは、異なる間隔で異なる線形式を持つ関数を定義したいということです。これらの間隔は、xWerte と yWerte で指定されたデータ ポイント (およびこれらのデータ ポイントの数) に依存するため、切断ポイントの数とさまざまな関数ルールは修正されません (そのため、このがらくたを for ループではなく for ループで試していますifelse 構造...)
私がこれまで試みてきたのは、カット (区間の切断点) と値 = これらの区間のそれぞれの関数規則を定義することです。私が行ったことを理解できるようにコードを書き留めますが、この部分は機能しているように見えますが、私の質問は私のコードのこの部分には関係ありません...
# cuts contains the points where the function rule changes, this works fine
cuts <- c(xWerte[2])
for(i in 3:length(xWerte)-1){
cuts <- c(cuts,xWerte[i+1])
}
cuts
# vals is supposed to contain the function rules in each interval
vals <- c()
for(i in 1:(length(xWerte)-1)){
# fi -> function rule in the i.th interval, also works fine...
fi <- function(x){
return(as.numeric(m[[i]])*x
+(as.numeric(yWerte[i])
-as.numeric(m[[i]])*as.numeric(xWerte[i])))
}
# here, I want to add the i different function rules to the values
vals <- c(vals,fi)
}
# searchInt looks up the interval x is in, works fine
searchInt <- function(x){findInterval(x, c(0, cuts),rightmost.closed = TRUE)}
これはすべて、私がやりたいことをしているようです。 さて、ここに私の問題があります:
# fx should insert x to the function in vals
# that belongs to the interval x is located in...
fx <- function(x){vals[[searchInt(x)]](x)}
# one example with x= 0.8
print(fx(0.8))
これは私を示しています
[1] 0.619
これは vals[length(vals)]=vals[6] です。しかし、searchInt(0.8) = 5 なので、vals[5]=0.63806 と表示されるはずです。
異なる関数ルールを vals に追加することに成功したことを知っています。
for(i in 1:length(vals)){
print(vals[[i]](0.8))}
Rが見せてくれる
[1] 0.15216
[1] 0.5143
[1] 0.5143
[1] 0.59998
[1] 0.63806 # this is vals[[5]](0.8), the result fx(0.8) should evaluate to...
[1] 0.619
したがって、さまざまな間隔の正しい関数ルールは存在しますが、fx によって適切に呼び出すことはできません。R は、以前は vals に異なる関数規則があったことを「忘れた」ように思えます。searchInt(x) の値に関係なく、vals に追加された最後の関数ルールを呼び出すだけです。
これはローカル変数とグローバル変数の問題である可能性があることがわかりましたが、修正方法がわかりません:(
読んでくれて、私を助けてくれてありがとう!
PS: 間違いをお詫びします。私はネイティブ スピーカーではありませんが、最善を尽くしました ;)