Извлечение значений из списка с элементами S4 - PullRequest
0 голосов
/ 07 августа 2020

Я хотел бы извлечь все 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 Ответ

1 голос
/ 07 августа 2020

Вы можете просто использовать анонимную функцию, которая использует @:

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 за это предложение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...