我正在研究一个R教程并怀疑我必须使用其中一个函数,但我不确定哪个(是的,我研究了它们,但直到我对R术语更加流利,它们都很混乱).
在我的工作目录中有一个文件夹"specdata".Specdata包含数百个名为001.csv - 300.csv的CSV文件.
我正在处理的函数必须计算输入数量的csv文件的总行数.因此,如果函数中的参数是,1:10并且每个文件都有十行,则返回100.
这是我到目前为止所拥有的:
complete <- function(directory,id = 1:332) {
setpath <- paste("/Users/gcameron/Desktop",directory,sep="/")
setwd(setpath)
csvfile <- sprintf("%03d.csv", id)
file <- read.csv(csvfile)
nrow(file)
}
Run Code Online (Sandbox Code Playgroud)
当ID参数是一个数字(例如17)时,这可以工作.但是,如果我输入说10:50作为参数,我收到一个错误:
Error in file(file, "rt") : invalid 'description' argument
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能计算输入ID参数的总行数?
read.csv期望只读取一个文件,所以你需要循环文件,这样做的另一种方法是使用sapply:
nrows <- sapply( csvfile, function(f) nrow(read.csv(f)) )
sum(nrows)
Run Code Online (Sandbox Code Playgroud)
例如,这里是您的complete函数的重写:
complete <- function(directory,id = 1:332) {
csvfiles <- sprintf("/Users/gcameron/Desktop/%s/%03d.csv", directory, id)
nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)) )
sum(nrows)
}
Run Code Online (Sandbox Code Playgroud)