如何传递循环迭代的值并在R中的循环内使用它?

时间:2018-10-05 11:21:18

标签: r loops

我目前正在尝试在RStudio中运行脚本,其中的一部分涉及从数据帧中的字符串中删除标点符号。到目前为止,这是一个特别耗时的步骤,因此我想尝试插入一些输出消息以确保它没有崩溃并仍在运行。

我的想法是尝试在删除标点符号的循环中放入另一个循环,该循环将输出打印的消息,说明该步骤的完成百分比,但仅当百分比值为整数时才打印-以不打印百万消息。

我尝试使用类似下面的方法,但是这里最大的问题是我可以确定我使用了错误的“ i”变量,因此这不会像我写的那样起作用。因此,我希望可以对if循环中的内容进行修复或替代。

    for(i in 1:nrow(eqtls)){

      eqtls$gene_id_new[i]=rem_punct(eqtls$gene_id[i])

      if((i/nrow(eqtls)*(100))%%1=0){

        completion = (i/nrow(eqtls))*100

        message(sprintf("Percent complete: %s\n", completion))
      }
    }

要进一步澄清:这现在纯粹是学术性的,因为我正在切换到另一种删除标点符号的方法。

2 个答案:

答案 0 :(得分:0)

此链接-How to get index in a loop in R应该可以帮助您解决R中的循环问题。

通常-如果您想在循环中遍历值,则只需-

for(i in eqtls){
    print(i)
}

答案 1 :(得分:0)

在一条输出行中:

数据

eqtls <- data.frame("var1" = rep(paste(LETTERS[1:26],".",LETTERS[26:1],sep = ""),500), 
                    stringsAsFactors = FALSE)

代码

for(i in 1:nrow(eqtls)){
    eqtls$var1[i] <- gsub("\\.","",eqtls$var1[i])
    if((i/nrow(eqtls)*(100))%%1 == 0){
        cat(paste(round((i/nrow(eqtls))*100,0), "%..."))
    }
}

结果

> 1 %...2 %...3 %...4 %...5 %...6 %...8 %...9 %...10 %...11 %...12 %...
13 %...15 %...16 %...17 %...18 %...19 %...20 %...21 %...22 %...23 %...
24 %...25 %...26 %...27 %...30 %...31 %...32 %...33 %...34 %...35 %...
36 %...37 %...38 %...39 %...40 %...41 %...42 %...43 %...44 %...45 %...
46 %...47 %...48 %...49 %...50 %...51 %...52 %...53 %...54 %...59 %...
60 %...61 %...62 %...63 %...64 %...65 %...66 %...67 %...68 %...69 %...
70 %...71 %...72 %...73 %...74 %...75 %...76 %...77 %...78 %...79 %...
80 %...81 %...82 %...83 %...84 %...85 %...86 %...87 %...88 %...89 %...
90 %...91 %...92 %...93 %...94 %...95 %...96 %...97 %...98 %...99 %...
100 %...