我在 tmp 目录中有一个 .stat 文件列表。

样本:

a.stat =>

abc,10

abc,20

abc,30

b.stat=>
xyz,10

xyz,30

xyz,70

等等

我需要找到所有 .stat 文件的摘要。
目前我正在使用filelist<-list.files(path="/tmp/",pattern=".stat")data<-sapply(paste("/tmp/",filelist,sep=''), read.csv, header=FALSE)
但是,我需要将摘要应用于正在读取的所有文件。或者只是在 n 个 .stat 文件中我需要来自第二列的摘要

使用
data<-sapply(paste("/tmp/",filelist,sep=''), summary, read.csv, header=FALSE) 不起作用,并为我提供了带有类字符的摘要,这不是我想要的。
sapply(filelist, function(filename){df <- read.csv(filename, header=F);print(summary(df[,2]))}) 工作正常。然而,我的总体目标是找到任何一侧都超过 2 个标准差的值(异常值)。所以我使用 sd,但同时需要检查当前读取的文件中的所有值是否都在 2SD 范围内。

最佳答案

一次应用多个函数:

f <- function(x){
  list(sum(x),mean(x))
}
sapply(x, f)

在您的情况下,您希望按顺序应用它们,因此首先读取 csv 数据然后进行汇总:
sapply(lapply(paste("/tmp/",filelist,sep=''), read.csv), summary)

要对数据集进行子集化以在特定列上运行汇总,您可以使用将外部 sapply 函数从 summary 更改为 function(x) summary(x[[2]])

关于r - 在 sapply 中应用多个功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30053266/

10-13 00:29