2017-09-15 45 views
-1

私はかなり新しく、関数を書くのに苦労しています。私はGAMに合ったものを作ろうとしています。線形モデルの例が見つかりました。しかし、GAMに同じ構造を使用しようとするとエラーが発生します。is.data.frame(data)のエラー:オブジェクト 'data =' 'が見つかりません

線型モデル:

library(mgcv) 
library(ggplot2) 
theme_set(theme_bw()) 
set.seed(100) 
dd <- data.frame(x=1:100,y=round(rnorm(100,mean=100),1), z=round(runif(100,1,4),1)) 
lm(y~x, weights=z, data=dd)$call 
lm(formula = y ~ x, data = dd, weights = z) 

f2 <- function(f,w,d){ 
    do.call("lm", list(formula=as.formula(f), weights=as.name(w), data=as.name(d))) 
} 
f2("y~x", "z", "dd")$call 
lm(formula = y ~ x, data = dd, weights = z) 

とGAMバージョン

set.seed(100) 
dd <- data.frame(x=1:100,y=round(rnorm(100,mean=100),1)) 
gam(y ~ s(x, k=64, bs='ad'), data = dd, method = 'REML', select = 'TRUE')$call 
gam(formula = y ~ s(x, k=64, bs='ad'), data = dd, method = 'REML', select = 'TRUE') 

f2 <- function(f,m,s,d){ 
    do.call("gam", list(formula=as.formula(f),method=as.name(m),select=as.name(s),data=as.name(d))) 
    } 

f2("y ~ s(x, k=64, bs='ad')", "method = 'REML'", "select = 'TRUE'", "data = dd")$call 

# Error in is.data.frame(data) : object 'data = dd' not found occurs 

gam(formula = y ~ s(x, k = 64, bs = "ad"), data = dd) 
+1

WHどのようなパッケージですか? – PoGibas

+0

なぜ、do.call( "gam"、list(formula = as.formula(f)、method = m、select = s、data = d)) 'と' f2( "y〜s(x、k = 64、bs = 'ad') "、 'REML'、TRUE、dd)'? – r2evans

+0

申し訳ありません、パッケージを追加しました。 GAMは一般化された追加モデルです。私の場合は、散布図があり、GAMはy値を平滑化するので、xとyの関係は非線形です。 –

答えて

0

コール:

f2 <- function(f, m, s, d){ 
    do.call("gam", list(formula=as.formula(f),method = "REML",select = s, data = as.name(d))) 
} 
f2("y ~ s(x, k=64, bs='ad')", "REML", TRUE, d = "dd")$call 

結果:

gam(formula = y ~ s(x, k = 64, bs = "ad"), data = dd, method = "REML", 
    select = TRUE) 
+0

クール、ありがとう!他の1つ(多分馬鹿げた質問でしょう):私は自分のコードを使用できるように、結果をどのように返すことができますか? –

関連する問題