从具有S4元素的列表中提取值

时间:2020-08-07 11:00:22

标签: r list

我想从列表中提取所有teststat。手动,我可以达到预期的结果。这是代码:

library(urca)

set.seed(1234)

df_example <- data.frame(a = rnorm(75), b = rnorm(75), c = rnorm(75), d = rnorm(75))

df_UR_pp <- lapply(
  df_example,
  function(x){
    ur.pp(x, type = "Z-tau", model = "constant", lags = "short")
  }
)

# Problem is here

all_results <- lapply(df_UR_pp, `[`, 'teststat')
#> Error in FUN(X[[i]], ...): object of type 'S4' is not subsettable

# Expected result

table_all_results <- data.frame("Variable" = c("a", "b" , "c", "d"), 
                                "Z-tau statistic" = c(df_UR_pp$a@teststat, df_UR_pp$b@teststat, df_UR_pp$c@teststat, df_UR_pp$d@teststat))

table_all_results
#>   Variable Z.tau.statistic
#> 1        a       -7.650956
#> 2        b       -7.396869
#> 3        c       -7.402462
#> 4        d       -8.256534

1 个答案:

答案 0 :(得分:1)

您可以只使用使用@的匿名函数:

lapply(df_UR_pp, function(x) x@teststat)
$a
[1] -7.650956

$b
[1] -7.396869

$c
[1] -7.402462

$d
[1] -8.256534

或者,您可以在slot()通话中致电lapply()

lapply(df_UR_pp, slot, 'teststat')
$a
[1] -7.650956

$b
[1] -7.396869

$c
[1] -7.402462

$d
[1] -8.256534

(建议使用@Roland)

相关问题