从R

时间:2016-04-16 20:33:11

标签: r

我说我的nls模型适用于R中的某些数据d

#fake data
x<- seq(1,10,by=0.1)
y<- 1*(x / (2 + x))
y<- y + rnorm(0, 0.05, n =length(y))
d<- data.frame(x,y)

#fit the nls model
model <- nls(y ~ v1*(x/(v2 + x)), start=c(v1=0.9,v2=2.1))

我想从model对象返回数据框的名称(d),以及从属变量的名称(y)。

1 个答案:

答案 0 :(得分:2)

您可以从模型对象中获取这些值,如下所示:

# Data frame name
as.character(model$data)

# Dependent variable name
as.character(formula(model)[2])

我怎么知道,你问?好吧,我没有,但你可以通过查看R函数返回的模型对象(在控制台中输入str(model))的结构来找出这样的事情。

例如,在这种情况下,model是包含六个元素的列表。名为m的第一个元素本身就是一个列表。以下是输出的前几行:

str(model)
List of 6
 $ m          :List of 16
  ..$ resid     :function ()  
  ..$ fitted    :function ()  
  ..$ formula   :function ()

请注意,m的其中一个元素称为formula,它是一个函数。所以,我尝试在控制台中键入formula(model)并得到了这个:

y ~ v1 * (x/(v2 + x))

然后我输入str(formula(model))以查看实际返回的对象formula()

Class 'formula' length 3 y ~ v1 * (x/(v2 + x))
  ..- attr(*, ".Environment")=<environment: R_GlobalEnv>

请注意,它返回一个包含三个元素(length 3)的对象。第二个元素恰好包含因变量名称。将它包装在as.character中会将其更改为字符串,这就是我想要的。

现在为数据框。请注意,str(model)返回的其中一个列表元素称为data。所以我在控制台中键入了model$data并得到了这个:

d

再一次,我将其包裹在as.character中以将输出转换为字符串。

可能有更好的方法来解决这个问题,但不要低估你可以通过在函数返回的对象内部进行内容来实现的目标。