我正在学习一个R教程,我怀疑我必须使用这些函数中的一个,但我不确定是哪个(是的,我研究过它们,但在我对R术语变得更加流利之前,它们是相当令人困惑的)。
在我的工作目录中有一个文件夹"specdata“。Specdata包含数百个名为001.csv - 300.csv的CSV文件。
我正在使用的函数必须计算输入数量的csv文件的总行数。因此,如果函数中的参数是1:10,并且每个文件都有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)
}当ID参数是一个数字时,这是可行的,比如17。但是,如果我输入10:50作为参数,我会收到一个错误:
Error in file(file, "rt") : invalid 'description' argument我应该怎么做才能从输入的ID参数中计算出总行数?
发布于 2013-01-16 20:44:31
read.csv期望只读取一个文件,所以您需要循环遍历文件,一种R惯用的方法是使用sapply:
nrows <- sapply( csvfile, function(f) nrow(read.csv(f)) )
sum(nrows)例如,以下是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)
}发布于 2013-01-16 20:47:47
家庭作业问题通常是这样标记的,尽管我不知道这是否是必需的,但这显然是家庭作业。
您编写的函数期望id不是向量(尽管默认值是整数的向量)。
将其更改为使用*apply函数之一(更简洁、更常见),或者甚至使用显式循环。对于id向量中的每个元素,必须调用一个函数来打开该文件并计算观测值。
This stackoverflow post很好地解释了*apply函数之间的差异。
发布于 2020-11-09 21:52:20
id <-c(1:332)
filenames=list.files(path="source_path", full.names=TRUE)
for(a in id){
dataset <- read.csv(filenames[a])
res <- nrow(na.exclude(dataset)) #nrow count the row of the dataset
df <-data.frame(
id =a,
nobs =res,
stringsAsFactors=FALSE)
}
dfhttps://stackoverflow.com/questions/14358629
复制相似问题