【问题标题】:R How to generate unique list outputs using if statements in a for loop?R如何在for循环中使用if语句生成唯一列表输出?
【发布时间】:2013-05-02 03:02:24
【问题描述】:

我有一个文件列表,其中进入 for 循环的文件具有不同数量的列。我想生成每个输入文件的子集,其中时间变量(列)>800,并且输入文件的编号也是输出列表的一部分。

由于列号不同(6、7、8 或 9),我能够使用下面的代码版本(if 语句)一次输出一个文件的列表。但是当我尝试循环它并更改我得到的文件名时:

Error in subset[[i]] : object of type 'closure' is not subsettable

for (i in 1:n)
    {currentfile<- filelist[i]
    a=read.csv(currentfile, header=F)
    b=a[3:1000]
    mat-as.matrix(b)
    mat2.df<-as.data.frame(mat2)
    if (ncol(mat2.df) == 6) subset6[[i]]<-subset[[i]](mat2.df, time>800)
    if (ncol(mat2.df) == 7) subset7[[i]]<-subset[[i]](mat2.df, time>800)
    if (ncol(mat2.df) == 8) subset8[[i]]<-subset[[i]](mat2.df, time>800)
    if (ncol(mat2.df) == 9) subset9[[i]]<-subset[[i]](mat2.df, time>800)'
}

提前感谢您的任何建议!

【问题讨论】:

    标签: r if-statement for-loop


    【解决方案1】:

    您有什么理由需要 4 个单独的文件列表吗?该循环还将值分配给列表对象subset6、subset7、subset8 和subset9。您必须先创建它们,可能使用以下命令:

    subset6 = list()
    

    我个人认为没有必要。为什么不将列表初始化为

    subsets = list()
    

    然后,在你的循环中,你可以写

    subsets[[i]] = subset(mat2.df, time>800)
    

    如果您想要单独的列表,您会遇到另一个问题,即您需要单独的计数器来索引每个列表。因此,您需要为每个单独的列表添加 i6i7i8i9

    在较小的说明中,我无法确定您的代码前面部分中的拼写错误。如果处理输入预格式化的早期语句可能有错误,则很难对归因于后面一组条件语句的错误消息进行故障排除。

    b= a[3:1000] 
    mat-as.matrix(b)
    

    这些应该是:

    b <- a[3:1000, ]
    mat2 <- as.matrix(b)
    

    read.csv 有一个skip 选项可供您使用。

    【讨论】:

      【解决方案2】:

      错误消息是说您正在尝试将索引(“子集”)应用于函数(“闭包类型的对象”)。

      考虑到您尝试子集化的函数称为subset,错误消息有点令人困惑。

      违规部分是:subset[[i]](mat2.df. . .

      将那些[[i]] 移动到括号的末尾,你应该没问题。

         subset(mat2.df, time>800)[[i]]
      

      与该问题不同,您可能需要重新访问您的 for 循环。
      例如,这些线路背后的动机是什么?他们是否实现了预期目的?

           mat - as.matrix(b)
           mat2.df <- as.data.frame(mat2)
      

      【讨论】:

      • 我尝试移动 [[i]],但现在收到错误消息:找不到对象 'subset6'。至于数据框,它确实有超出这个问题范围的目的。感谢您的回复。
      猜你喜欢
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      相关资源
      最近更新 更多