R中存在顺序返回.csv文件的闭包问题

R中存在顺序返回.csv文件的闭包问题,r,csv,closures,scoping,R,Csv,Closures,Scoping,我有一个以.csv文件形式输出数据的模型。输出目录中充满了.csv文件,每个文件名为n.csv,其中n是运行编号。因此,在第0次运行时,它会创建0.csv,在第1次运行时,它会创建1.csv,以此类推 现在我想在R中分析这些数据,并将其与另一个模型的输出进行比较。我写了一个函数,它在两个模型上运行我想要的分析,作为输入函数。我比较的模型是一个内置的sna函数,为了生成一个模拟我的模型的函数,我编写了以下闭包 #creates a model function that returns seque

我有一个以.csv文件形式输出数据的模型。输出目录中充满了.csv文件,每个文件名为n.csv,其中n是运行编号。因此,在第0次运行时,它会创建0.csv,在第1次运行时,它会创建1.csv,以此类推

现在我想在R中分析这些数据,并将其与另一个模型的输出进行比较。我写了一个函数,它在两个模型上运行我想要的分析,作为输入函数。我比较的模型是一个内置的sna函数,为了生成一个模拟我的模型的函数,我编写了以下闭包

#creates a model function that returns sequentially numbered .csv files from a directory
make.model <- function(dir) {
  i <- -1 # allows for starting the .csv ennumeration at 0
  model <- function() {
    i <<- i + 1
    my.data <- as.matrix(read.csv(paste0(dir, i, ".csv"), header=FALSE))
    return(my.data)
  }
  return(model)
}
#创建一个模型函数,从目录中返回按顺序编号的.csv文件

make.model自我回答要关闭,我在评论的帮助下找到了答案

length(list.files(pattern=".csv"))
允许您获取.csv文件的数量,从而更改将i增加为读取的行

i <<- (i + 1) %% length(list.files(pattern=".csv"))

我尝试i=i+1而不是i@akaDrHouse,我的印象是在R中使用“=”作为变量赋值被认为是不好的风格,而“使用全局赋值被广泛认为是不好的做法。它改变了代码的运行方式和架构方式。
@akaDrHouse虽然您的for循环示例不适合我的需要,但长度(list.files(pattern=“.csv”))事实上,替换
确实有效。通过替换
我不认为我能在这一点上给出完整的答案…这很棘手,而且我不确定我是否真的理解您是如何使用它的。我很高兴@akaDrHouse的建议很有帮助;如果您对
list.files
使用
full.names=t
,您将不需要对其进行任何调整将其传递到
read.csv
i <<- (i + 1) %% length(list.files(pattern=".csv"))