将函数应用于R中的嵌套列表的某些元素

问题描述

我希望仅将函数应用于嵌套列表的某些元素

"peerDependencies": { 
  "react": "*","react-native": "*"
}

所需的输出如下所示: 将sum函数应用于列表的$ forecast元素

l <- list()

l$a$forecast <- rnorm(3)
l$a$model <- "arima"
l$b$forecast <- rnorm(3)
l$b$model <- "prophet"

我尝试过这样的事情:

fcst <- c(sum(l$a$forecast),sum(l$b$forecast))
mdl <- c(l$a$model,l$b$model)
df <- data.frame(fcst,mdl)

解决方法


do.call(
  rbind,lapply(
    l,function(x) list(fcst = sum(x$forecast),model = x$model)
  )
)

由于您知道返回对象的确切尺寸,因此可以在这种情况下使用vapply来改善性能:

vapply(
  l,FUN = function(x) list(fcst = sum(x$forecast),model = x$model),FUN.VALUE = list(fcst = numeric(1),model = character(1))
)

但是,生成的对象可能很难使用。

,

rrapply()软件包中结合使用rrapply和dplyr的bind_rows()的另一种方法。这也扩展到包含更深层嵌套级别的列表。

rrapply::rrapply(l,condition = function(x,.xname) .xname == "forecast",f = sum) %>%
  dplyr::bind_rows()

#> # A tibble: 2 x 2
#>   forecast model  
#>      <dbl> <chr>  
#> 1    -1.28 arima  
#> 2     1.10 prophet

数据

set.seed(1)

l <- list(
  a = list(forecast = rnorm(3),model = "arima"),b = list(forecast = rnorm(3),model = "prophet")
)
,

您可以获得带有对象letters的字母,然后在循环中使用其输出:

    n = 2 #number of lists you have
    sumfore = model = vector()
    for(i in letters[seq(1,n,1)]){
      sumfore[i] = sum(l[[i]]$forecast)
      model[i] =l[[i]]$model}
    newdf = data.frame(sumfore,model)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...