R读取文件以迭代它们,由于文件处理错误,最终迭代命令将不起作用

时间:2015-12-03 20:57:02

标签: r debugging matrix

我已经将100个双列矩阵写入他们自己的单独文本文件中,现在需要将内容读回100个矩阵的列表中,以便我可以在此条目“ComputeStepSize”的底部执行命令。我的代码如下:

我将“listofmatrices1”中的100个矩阵中的每一个写入自己的文件中。

      for(i in 1:length(listofmatrices1)){
         write.table(listofmatrices1[[i]], file=(paste("traj1", as.character(i), ".txt", sep="")), row.names=FALSE, sep="\t")
      }

使用sys()命令创建文件列表,以便我可以使用以下命令读取它们。

      individualmatrices1<-system("ls /Users/Deirdreclarkson/rpractice/traj1*", intern=TRUE)
      readTrajectory1 <- function(traj1) {
         a <- read.table(traj1, sep="\t", header=TRUE)
         return(a)
      }

我使用“readTrajectory”将矩阵读入空列表。

      trajectorieslist1<-vector("list", 100)
      for (i in 1:length(individualmatrices1)){
        val1 <- readTrajectory1(individualmatrices1[i])
        trajectorieslist1[[i]]<-val1
      }

列表中某个矩阵的标题:

               X        Y
             112.4563 112.4563
             110.1210 110.1210
             109.2143 109.2143
             108.1806 108.1806
             107.3700 107.3700

我正在迭代矩阵2列并测量每个连续值之间的差异。

      ComputeStepSize<-function(table){
        deltastepY <- diff(table[,2][seq(1,length(table[,2]), 2)])
        print(deltastepY)
        deltastepX <- diff(table[,1][seq(1,length(table[,2]), 2)])
        print(deltastepX)
        overalldelta<-sqrt(deltastepY**2+deltastepX**2)
        return(overalldelta)
      }

使用for循环读取各个矩阵。

      for (i in 100){
        finalsteplist1<-ComputeStepSize(trajectorieslist1[i])
      }

问题

      Error in table[, 2] : incorrect number of dimensions

我不明白为什么会这样,因为我告诉“ComputeStepSize”命令只有2列 - “diff(table [,2] [seq(1,length [table [,2]), 2)])”。

我的文件处理中的任何一个地方都可能出现这种情况吗?

我已将其中一个文件的read.table分配给变量“a”并尝试使用ComputeStepSize(a)。这会返回一个通用调试器:

          function (x, ...) UseMethod("print")

但我不能打印deltastepX或Y,因为它会导致命令无法在它们上面运行。

1 个答案:

答案 0 :(得分:0)

      Error in table[, 2] : incorrect number of dimensions
     

...我的文件处理中的任何一个地方都可以出错,这样就可以了   正在发生什么?

您在文件处理方面没有出错,您只是在

中使用了一般订阅运算符[ ... ]
        finalsteplist1<-ComputeStepSize(trajectorieslist1[i])

(产生列表的子列表)而不是用于选择单个元素的运算符[[ ... ]]

        finalsteplist1<-ComputeStepSize(trajectorieslist1[[i]])