0

我正在使用一个应该返回具有 2 列的数据框(表?)的函数。

这是功能:

complete <- function(directory,id = 1:332) {

    csvfiles <- sprintf("/Users/myname/Desktop/%s/%03d.csv", directory, id)

    nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))
    data.frame(ID=sprintf('%03d', id), countrows=sapply(csvfiles,function(x) length(count.fields(x))))
    }

样本输出:

                                       ID countrows
/Users/myname/Desktop/specdata/100.csv 100      1097
/Users/myname/Desktop/specdata/101.csv 101       731

我需要输出只显示该文件路径中的数字。所以第一个记录应该是 100,第二个记录应该是 101,依此类推。

这在控制台中完成了工作

colID <- sprintf('%03d', id)

但我正试图毫无乐趣地将它整合到我的功能中。

我试过了:

nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))
+ data.frame(ID=sprintf('%03d', id), countrows=sapply(csvfiles,function(x) length(count.fields(x))))

我试过了:

 complete <- function(directory,id = 1:332) {

    csvfiles <- sprintf("/Users/myname/Desktop/%s/%03d.csv", directory, id)

    colID <- sprintf('%03d', id)

    nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))
    data.frame(ColID, countrows=sapply(csvfiles,function(x) length(count.fields(x))))
    }

我确定我只有一步之遥?

基于以下反馈

我试过这个

complete <- function(directory,id = 1:332) {

    csvfiles <- sprintf("/Users/myname/Desktop/%s/%03d.csv", directory, id)

    colID <- sprintf('%03d', id)

    nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))
    data.frame(ID=id, countrows=sapply(csvfiles,function(x) length(count.fields(x))))

    row.names(colID) <- basename(row.names(colID))
    }

这会返回一个错误:“basename(row.names(colID)) 中的错误:预期的字符向量参数”

4

1 回答 1

1

采用以下两种方式之一: A(在函数内部):

complete <- function(directory,id = 1:332) {

   csvfiles <- sprintf("/Users/myname/Desktop/%s/%03d.csv", directory, id)

   nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))
   data.frame(ID=sprintf('%03d', id), 
              countrows=sapply(csvfiles,function(x) length(count.fields(x))),
             row.names=id
           )
       }

B(函数外):

 compdf <- complete()
row.names(compdf) <- 1:NROW(compdf)
于 2013-01-16T17:48:55.767 回答