灵活应用

use*_*867 7 r sapply

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

样品:

a.stat =>

abc,10

abc,20

abc,30
Run Code Online (Sandbox Code Playgroud)

b.stat =>

xyz,10

xyz,30

xyz,70
Run Code Online (Sandbox Code Playgroud)

等等

我需要找到所有.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范围内。

jan*_*cki 7

一次应用多种功能:

f <- function(x){
  list(sum(x),mean(x))
}
sapply(x, f)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您想按顺序应用它们,因此首先读取csv数据,然后进行摘要:

sapply(lapply(paste("/tmp/",filelist,sep=''), read.csv), summary)
Run Code Online (Sandbox Code Playgroud)

要对数据集进行子集化以在特定列上运行摘要,可以使用将外部应用功能从更改summaryfunction(x) summary(x[[2]])


veg*_*tvd 5

对于您不想保存在环境中的短函数,也可以在 sapply 调用中完成。对于 @flxflks 的示例:

sapply(df, function(x) c(min = min(x), avg = mean(x)))
Run Code Online (Sandbox Code Playgroud)