【问题标题】:How to store the output into a list of matrices如何将输出存储到矩阵列表中
【发布时间】:2017-02-09 02:48:19
【问题描述】:

数据:

x <- seq(0, 1, len = 1024)
pos <- c(0.1, 0.13, 0.15, 0.23, 0.25, 0.40, 0.44, 0.65, 0.76, 0.78, 0.81)
hgt <- c(4, 5, 3, 4, 5, 4.2, 2.1, 4.3, 3.1, 5.1, 4.2)
wdt <- c(0.005, 0.005, 0.006, 0.01, 0.01, 0.03, 0.01, 0.01, 0.005, 0.008, 0.005)
pSignal <- numeric(length(x))
for (i in seq(along=pos)) {
  pSignal <- pSignal + hgt[i]/(1 + abs((x - pos[i])/wdt[i]))^4
}
df = as.data.frame(rbind(pSignal,pSignal,pSignal))
dflist=list(df,df,df)

我正在尝试运行这个 pracma 包的 findpeaks() 函数来查找列表 dflist 中每个 data.frame 中每一行的局部最大值。输出是一个 N x 4 数组。 N = 峰数。因此,在第一个 data.frame 的第一行中,如果找到 4 个峰值,它将是一个 4x4 矩阵。我的目标是在每个 data.frame 中的每一行上循环这个函数,并将输出的矩阵存储在一个列表中。

我的代码:

## Find Peaks 
pks=list()
for (i in 1:length(dflist)){
  for (j in 1:length(dflist[[i]])){
    row = dflist[[i]][j,]
    temppks = findpeaks(as.vector(row,mode='numeric')
                        ,minpeakheight = 1.1,nups=2)
    pks[i][[j]]=rbind(pks,temppks)
  }
}

这似乎也不是我想要的。有什么想法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    apply() 和 sapply() 的组合可以完成这项工作:

    my.f.row <- function(row) findpeaks(as.vector(row,mode='numeric'), minpeakheight = 1.1, nups=2)
    sapply(dflist, function(df.i) apply(df.i, 1, my.f.row))
    

    最终你必须重新组织结果。

    【讨论】:

    • 有点用。我对输出的格式感到困惑。我希望有一些东西,其中外部列表​​是每个 data.frame,然后在每个列表项内部将是每行输出的单独矩阵。
    • 从 sapply 到 lapply 的简单更改给了我想要的结果。谢谢!
    • 快速问题:当我运行这个时,第一个(minpeak 和 nups)中的参数没有被传递给下面的应用程序。有什么想法吗?
    • 使用...-参数。 help('...')
    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多