R:访问字段值

发布于 2024-08-12 10:05:28 字数 1727 浏览 4 评论 0原文

我想知道如何访问 R 对象中包含的各个字段。或者,更准确地说,如何让 R 告诉我如何做。

例如,如果我运行以下代码:

dx.ct <- ur.df(dat1[,'dx'], lags=3, type='trend')
summary(dx.ct)

那么我会得到以下输出:

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression trend 


Call:
lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.46876 -0.24506  0.02420  0.15752  0.66688 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept)  1.099231   0.561377   1.958   0.0606 .
z.lag.1     -0.239438   0.141093  -1.697   0.1012  
tt          -0.019831   0.007799  -2.543   0.0170 *
z.diff.lag1 -0.306326   0.193001  -1.587   0.1241  
z.diff.lag2 -0.214229   0.186135  -1.151   0.2599  
z.diff.lag3 -0.223433   0.179040  -1.248   0.2228  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.3131 on 27 degrees of freedom
Multiple R-squared: 0.3326,     Adjusted R-squared: 0.209 
F-statistic: 2.691 on 5 and 27 DF,  p-value: 0.04244 


Value of test-statistic is: -1.697 2.4118 3.2358 

Critical values for test statistics: 
      1pct  5pct 10pct
tau3 -4.15 -3.50 -3.18
phi2  7.02  5.13  4.31
phi3  9.31  6.73  5.61

因此,我知道我应该能够单独访问上面的所有值,但我不知道如何指向它们。有什么方法可以让 R 告诉我它们是如何存储的吗?

我正在思考:

showobjects(summary(dx.ct))

然后它输出

$formula
$residuals
$coefficients
etc.

,然后我可以做

showobjects(summary(dx.ct)$residuals)

然后输出

$min
$1Q
$median
etc.

谢谢
卡尔

I would like to know how I can access the individual fields contained in an R object. Or, more precisely, how to get R to tell me how.

For example, if I run the following code:

dx.ct <- ur.df(dat1[,'dx'], lags=3, type='trend')
summary(dx.ct)

then I get this output:

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression trend 


Call:
lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.46876 -0.24506  0.02420  0.15752  0.66688 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept)  1.099231   0.561377   1.958   0.0606 .
z.lag.1     -0.239438   0.141093  -1.697   0.1012  
tt          -0.019831   0.007799  -2.543   0.0170 *
z.diff.lag1 -0.306326   0.193001  -1.587   0.1241  
z.diff.lag2 -0.214229   0.186135  -1.151   0.2599  
z.diff.lag3 -0.223433   0.179040  -1.248   0.2228  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.3131 on 27 degrees of freedom
Multiple R-squared: 0.3326,     Adjusted R-squared: 0.209 
F-statistic: 2.691 on 5 and 27 DF,  p-value: 0.04244 


Value of test-statistic is: -1.697 2.4118 3.2358 

Critical values for test statistics: 
      1pct  5pct 10pct
tau3 -4.15 -3.50 -3.18
phi2  7.02  5.13  4.31
phi3  9.31  6.73  5.61

So, I know that I should be able to access all of the values above individually, I don't know how to point to them. Is there some way to ask R to show me how they are stored?

I am thinking along the lines of:

showobjects(summary(dx.ct))

And then it outputs

$formula
$residuals
$coefficients
etc.

and then I can do

showobjects(summary(dx.ct)$residuals)

which then outputs

$min
$1Q
$median
etc.

Thanks
Karl

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怪我闹别瞎闹 2024-08-19 10:05:28

作为另一种选择,请查看属性。例如,

example(ur.df)
attributes(lc.df) #lc.df is an ur.df object created during by example.

$y
[1] 10.4831 10.4893 10.5022 10.5240 10.5329 10.5586 10.5190 10.5381
[9] 10.5422 10.5361 10.5462 10.5459 10.5552 10.5548 10.5710 10.5861
[17] 10.5864 10.5802 10.6006 10.6168 10.6275 10.6414 10.6629 10.6758
[25] 10.6881 10.7240 10.7143 10.7222 10.7156 10.6964 10.6990 10.7081
[33] 10.7142 10.7078 10.7073 10.6954 10.6910 10.6967 10.7015 10.7083
[41] 10.7127 10.6922 10.6874 10.6989 10.7224 10.7452 10.7462 10.7663
[49] 10.7633 10.7737 10.8282 10.7872 10.8015 10.8139 10.7909 10.8029
[57] 10.7868 10.7979 10.8007 10.8008 10.7991 10.7956 10.8005 10.8160
[65] 10.8260 10.8405 10.8482 10.8633 10.8633 10.8615 10.8732 10.8649
[73] 10.8793 10.8909 10.8938 10.9116 10.9202 10.9409 10.9663 10.9700
[81] 10.9808 10.9878 11.0048 11.0272 11.0420 11.0701 11.0751 11.0964
[89] 11.1069 11.1123 11.1231 11.1223 11.1303 11.1307 11.1389 11.1325
[97] 11.1261 11.1232 11.1220

$model
[1] "trend"

$lags
[1] 3

# etc.

如果您不需要完整的输出,则 names(attributes(lc.df)) 仅返回嗯,名称。

[1] "y"         "model"     "lags"      "cval"      "res"       "teststat"  "testreg"   "test.name" "class" 

As another alternative, take a look at attributes. e.g.

example(ur.df)
attributes(lc.df) #lc.df is an ur.df object created during by example.

$y
[1] 10.4831 10.4893 10.5022 10.5240 10.5329 10.5586 10.5190 10.5381
[9] 10.5422 10.5361 10.5462 10.5459 10.5552 10.5548 10.5710 10.5861
[17] 10.5864 10.5802 10.6006 10.6168 10.6275 10.6414 10.6629 10.6758
[25] 10.6881 10.7240 10.7143 10.7222 10.7156 10.6964 10.6990 10.7081
[33] 10.7142 10.7078 10.7073 10.6954 10.6910 10.6967 10.7015 10.7083
[41] 10.7127 10.6922 10.6874 10.6989 10.7224 10.7452 10.7462 10.7663
[49] 10.7633 10.7737 10.8282 10.7872 10.8015 10.8139 10.7909 10.8029
[57] 10.7868 10.7979 10.8007 10.8008 10.7991 10.7956 10.8005 10.8160
[65] 10.8260 10.8405 10.8482 10.8633 10.8633 10.8615 10.8732 10.8649
[73] 10.8793 10.8909 10.8938 10.9116 10.9202 10.9409 10.9663 10.9700
[81] 10.9808 10.9878 11.0048 11.0272 11.0420 11.0701 11.0751 11.0964
[89] 11.1069 11.1123 11.1231 11.1223 11.1303 11.1307 11.1389 11.1325
[97] 11.1261 11.1232 11.1220

$model
[1] "trend"

$lags
[1] 3

# etc.

If you don't want the full output, then names(attributes(lc.df)) returns only the, um, names.

[1] "y"         "model"     "lags"      "cval"      "res"       "teststat"  "testreg"   "test.name" "class" 
猥︴琐丶欲为 2024-08-19 10:05:28

除了unclass()之外,还可以尝试str()。或者阅读源代码,看看其他访问器是如何做到的。

编辑:例如,这里是您正在查看的 ur.df 对象的 S4 类方法 summary 的源代码:

setMethod("summary", "ur.df", function(object){
  return(new("sumurca", classname="ur.df", [email protected],\
    testreg=object@testreg, teststat=object@teststat, cval=object@cval, \
    bpoint=NULL, signif=NULL, model=object@model, type=NULL, auxstat=NULL, \
    lag=NULL, H=NULL, A=NULL, lambda=NULL, pval=NULL, V=NULL, W=NULL, P=NULL))
})

它使用S4 对象元素的标准 @ 访问器。

Besides unclass(), try str(). Or read the source code to see how the other accessors do it.

Edit: Here is for example the source code of the S4 class method summary for the ur.df object you were looking at:

setMethod("summary", "ur.df", function(object){
  return(new("sumurca", classname="ur.df", [email protected],\
    testreg=object@testreg, teststat=object@teststat, cval=object@cval, \
    bpoint=NULL, signif=NULL, model=object@model, type=NULL, auxstat=NULL, \
    lag=NULL, H=NULL, A=NULL, lambda=NULL, pval=NULL, V=NULL, W=NULL, P=NULL))
})

and it uses a standard @ accessor for S4 object elements.

留蓝 2024-08-19 10:05:28

您可以做的一件事是使用unclass()

 ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
 trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
 group <- gl(2,10,20, labels=c("Ctl","Trt"))
 weight <- c(ctl, trt)
 anova(lm.D9 <- lm(weight ~ group))
 s <- summary(lm.D90 <- lm(weight ~ group - 1))

使用名称来调查它:

 > names(unclass(s))
  [1] "call"          "terms"         "residuals"     "coefficients"  "aliased"            "sigma"         "df"            "r.squared"     "adj.r.squared"
 [10] "fstatistic"    "cov.unscaled" 

然后引用特定值:

 > s$r.squared
 [1] 0.9817833

One thing that you can do is use unclass().

 ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
 trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
 group <- gl(2,10,20, labels=c("Ctl","Trt"))
 weight <- c(ctl, trt)
 anova(lm.D9 <- lm(weight ~ group))
 s <- summary(lm.D90 <- lm(weight ~ group - 1))

Use names to investigate it:

 > names(unclass(s))
  [1] "call"          "terms"         "residuals"     "coefficients"  "aliased"            "sigma"         "df"            "r.squared"     "adj.r.squared"
 [10] "fstatistic"    "cov.unscaled" 

And then reference a specific value:

 > s$r.squared
 [1] 0.9817833
悲欢浪云 2024-08-19 10:05:28

正如 Dirk Eddelbuettel 提到的,您可以通过 @ 获取此 S4 类型类的指定字段值。

summary(dx.ct)@teststat

               tau3      phi2     phi3
statistic -1.668368 0.9731316 1.444461

summary(dx.ct)@cval

1pct  5pct 10pct
tau3 -3.96 -3.41 -3.12
phi2  6.09  4.68  4.03
phi3  8.27  6.25  5.34

You can get the specified field value via @ for this S4 type class as Dirk Eddelbuettel mentioned.

summary(dx.ct)@teststat

               tau3      phi2     phi3
statistic -1.668368 0.9731316 1.444461

summary(dx.ct)@cval

1pct  5pct 10pct
tau3 -3.96 -3.41 -3.12
phi2  6.09  4.68  4.03
phi3  8.27  6.25  5.34
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文