如何将输出存储到矩阵列表中

时间:2016-09-30 13:41:04

标签: r

数据:

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×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)
  }
}

这似乎并不像我想要的那样。任何想法?

1 个答案:

答案 0 :(得分: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))

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