我有30个数据帧的列表。
我想创建一个向量,该向量包含数据帧列表中所有30个数据帧中其中一列的第n个元素的标准差。我不认为我已经清楚地解释了这一点。但是我的for循环的代码应该清楚。
FFT233_sd <- list()
for (i in 1:431999) {FFT233_sd[[i]] <- sd(c(FFT233_data[[1]][i,6], FFT233_data[[2]][i,6], FFT233_data[[3]][i,6], FFT233_data[[4]][i,6], FFT233_data[[5]][i,6], FFT233_data[[6]][i,6], FFT233_data[[7]][i,6], FFT233_data[[8]][i,6], FFT233_data[[9]][i,6], FFT233_data[[10]][i,6], FFT233_data[[11]][i,6], FFT233_data[[12]][i,6], FFT233_data[[13]][i,6], FFT233_data[[14]][i,6], FFT233_data[[15]][i,6], FFT233_data[[16]][i,6], FFT233_data[[17]][i,6], FFT233_data[[18]][i,6], FFT233_data[[19]][i,6], FFT233_data[[20]][i,6], FFT233_data[[21]][i,6], FFT233_data[[22]][i,6], FFT233_data[[23]][i,6], FFT233_data[[24]][i,6], FFT233_data[[25]][i,6], FFT233_data[[26]][i,6], FFT233_data[[27]][i,6], FFT233_data[[28]][i,6], FFT233_data[[29]][i,6], FFT233_data[[30]][i,6]))}
for循环有效,但显然很慢。我被告知我应该使用lapply,但我不明白该怎么做。我尝试过以下方法:
results2738 <- lapply( FFT2738_data , function(x) {sd(x) } )
但是它导致了错误:
Show Traceback
Rerun with Debug
Error in is.data.frame(x) :
(list) object cannot be coerced to type 'double' In addition: Warning message:
In mean.default(x) : argument is not numeric or logical: returning NA
如果有人可以建议我调查资源,我会很高兴。
答案 0 :(得分:3)
这样的事情:
FFT233_sd <- sapply(1:431999, function(i) {
values <- sapply(1:length(FFT233_data), function(j) {
FFT233_data[[j]][i,6]
})
sd(values)
}
答案 1 :(得分:0)
试试这个
可重复的示例,mtcars列表(10次重复)
library(purrr)
L <- map(1:10, ~mtcars)
解决方案
您需要purrr:map
library(purrr)
sixthcol <- Reduce("cbind", map(L, ~.x[,6]))
ans <- apply(sixthcol, 1, sd)
输出
sixthcol <- Reduce("cbind", map(L, ~.x[,6]))
[1,] 2.620 2.620 2.620 2.620 2.620 2.620 2.620 2.620 2.620 2.620
[2,] 2.875 2.875 2.875 2.875 2.875 2.875 2.875 2.875 2.875 2.875
[3,] 2.320 2.320 2.320 2.320 2.320 2.320 2.320 2.320 2.320 2.320
[4,] 3.215 3.215 3.215 3.215 3.215 3.215 3.215 3.215 3.215 3.215
[5,] 3.440 3.440 3.440 3.440 3.440 3.440 3.440 3.440 3.440 3.440
[6,] 3.460 3.460 3.460 3.460 3.460 3.460 3.460 3.460 3.460 3.460
[7,] 3.570 3.570 3.570 3.570 3.570 3.570 3.570 3.570 3.570 3.570
[8,] 3.190 3.190 3.190 3.190 3.190 3.190 3.190 3.190 3.190 3.190
# etc
ans <- apply(sixthcol, 1, sd)
# 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0