Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算一系列csv文件的行数_R_Apply_Lapply - Fatal编程技术网

R 计算一系列csv文件的行数

R 计算一系列csv文件的行数,r,apply,lapply,R,Apply,Lapply,我正在学习一个R教程,我怀疑我必须使用其中一个函数,但我不确定是哪一个(是的,我研究过它们,但直到我能更流利地使用R术语为止,它们都相当混乱) 在我的工作目录中有一个文件夹“specdata”。Specdata包含数百个名为001.CSV-300.CSV的CSV文件 我正在使用的函数必须计算输入csv文件的总行数。因此,如果函数中的参数为1:10,并且每个文件都有十行,则返回100 以下是我目前掌握的情况: complete <- function(directory,id = 1:332

我正在学习一个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)
 }

我应该怎么做才能从输入的ID参数中计算总行数?

read.csv
希望只读取一个文件,因此您需要在文件上循环,一种惯用的方法是使用
sapply

nrows <- sapply( csvfile, function(f) nrow(read.csv(f)) )
sum(nrows)

家庭作业问题通常会被贴上这样的标签,虽然我不知道这是否是必需的,但这显然是家庭作业

编写的函数要求id不是向量(尽管默认值是整数向量)

将其更改为使用一个*apply函数(更简洁、更常见),甚至是一个显式循环。对于id向量中的每个元素,必须调用打开该文件并计算观察值的函数


对*apply函数之间的差异有很好的解释。

id
complete。好的,谢谢。我想看看faq中是否包含了这一点,但没有看到。我仍然认为知道什么时候是家庭作业是很有用的,因为我愿意为那些试图完成工作的人提供一个完整的答案,但我更愿意为家庭作业提供提示和指导。这确实是一个很好的观点,我也认为他们会将这一点添加到faq中,因为大多数用户都不阅读博客或翻译。谢谢。所以,如果你有时间的话,很少有人跟进Q。1) 我该把这条线放在哪里?在功能“完成”内还是之后?2) 如果在它之后,我不必再次为作用域声明对象csvfile吗?3) 您的参数“function(f)”-这就是我在其位置创建的函数的名称吗?i、 我编辑了我的答案。还要注意的是,您原来的函数在完成时从未重置工作目录,这是错误的。非常感谢,我非常感谢。这已经奏效了。现在看到它,我能理解了。
length(count.fields(f))
可能比
nrow(read.csv(f))
快得多。(您可以使用
system.time
)通过尝试此方法,我得到了一个“cc$id:$运算符对原子向量无效”错误。
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)
}   

df
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)
}
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)
}   

df
complete <- function(directory, id = 1:332){
  mylist <- list.files(path = directory, pattern = ".csv")
  result <- data.frame()
  for(i in id){
    my_data <- read.csv(paste(directory,mylist[i],sep=""))
    res <- nrow(na.exclude(my_data))  #nrow count the row of the dataset
    df <- data.frame("id" = i,"nobs" = res,  stringsAsFactors=FALSE)
    result <- rbind(result,df)
  }
  return(result)
}