2016-09-30 97 views
1
列表

数据:如何输出存入矩阵

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()函数查找每行的局部最大值在每个data.frame列表,dflist。输出是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

应用的组合()和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)) 

最终你要重组的结果。

+0

有点奏效。我很困惑输出的格式。我希望有一些东西在外面的列表是每个data.frame,然后在每个列表项中将是每行输出的单独矩阵。 –

+1

从sapply的简单变更给了我想要的结果。谢谢! –

+0

快速的问题:当我运行这个时,第一个参数(minpeak和nups)没有被传递给下面的应用程序。有任何想法吗? –