【问题标题】:looping a function through a folder通过文件夹循环函数
【发布时间】:2017-11-28 11:22:15
【问题描述】:

我正在尝试构建一个包含矢量操作的自定义函数。该功能在手动输入路径和数据名称后运行良好。每个文档都是一个 .txt 文件,其中仅包含一列中的数字。 但是文件夹中有大量文件,我的问题是如何在每个 .txt 文件中循环我的函数?

我已尝试使用此代码,但没有完成任何操作。

filenames <- list.files(path=("/folder/"), pattern=".txt")
ldf <- lapply(filenames, read.table)
lapply(ldf, sumfun)

这是代码的简化版本

    dataframe <- read.table('folder/dataframe.txt')
    sumfun <- function(a){
      x <- dataframe[1:length(dataframe)-1] 
      y <- dataframe[-1]
      dx <- y-x
      SUM1 <-  sum(dx[which(dx>1)]))^2
      SUM2 <- sum(dx[which(dx<1)]))^2
      SUMtot <- SUM1 + SUM2
       return(SUMtot)
    }

sumfun(dataframe)

据我了解,问题可能出在 x 和 y 向量操作上?

【问题讨论】:

  • 您是否尝试过使用“应用”功能?我还建议您插入打印语句并检查下面发生的情况。
  • 您需要将函数中的dataframe 替换为a,例如x &lt;- a[1:length(a)-1]。现在你没有在函数中使用你的输入变量。

标签: r


【解决方案1】:

问题出在你的函数上。您将参数定义为a,但改用dataframe。在sum() 操作中还有额外的)s。应该是:

sumfun <- function(a){
  x <- a[1:length(a)-1] 
  y <- a[-1]
  dx <- y-x
  SUM1 <- sum(dx[which(dx>1)])^2
  SUM2 <- sum(dx[which(dx<1)])^2
  SUMtot <- SUM1 + SUM2
  return(SUMtot)
}  

此外,如果您的工作目录不在同一位置,您收到的文件名可能会导致问题。以下添加将解决此问题:

filenames <- list.files(path=("/folder"), pattern=".txt", full.names = T)

【讨论】:

  • 非常感谢。但是在使用第一个代码运行它之后:filenames &lt;- list.files(path=("/folder/"), pattern=".txt") ldf &lt;- lapply(filenames, read.table) lapply(ldf, sumfun) 我得到一个错误:Error in matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = nr, : 'data' must be of a vector type, was 'NULL
  • 如我所说,您还应该将阅读命令更改为filenames &lt;- list.files(path=("/folder"), pattern=".txt", full.names = T)
猜你喜欢
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
相关资源
最近更新 更多