替换循环-R脚本

时间:2018-06-29 17:47:44

标签: r for-loop

是否可以用breakpoint系列功能替换下面代码中的breakpoint或以任何其他方式表示它以加快代码执行速度:

<div class="d-none d-md-block">Show on medium, and bigger, screen sizes</div>
<div class="d-md-none">Show on extra small and small screen sizes</div>
<div class="d-none d-md-block d-lg-none">Show on ONLY medium screen sizes</div>
<div class="d-none d-sm-block d-md-none d-xl-block">Show on ONLY small and extra large screen sizes</div>

编辑

示例输入(文本文件内容):

5 3

1 2 100

2 5 100

3 4 100

此处,输入的第一行包含2个以空格分隔的数字。第一个数字表示For loop矩阵最初将包含5个零。第二个数字表示第一行之后有几行。在上面的代码中,它被视为Apply

下一行包含3个以空格分隔的数字。第一个是line = strsplit(textFileContent, " ") for(i in 2:n){ #looping from 2nd line to nth line of an input txt file a = as.numeric(line[[i]][1]) #starting index in a matrix b = as.numeric(line[[i]][2]) #ending index in a matrix k = as.numeric(line[[i]][3]) #a number mat[1,a:b] = mat[1,a:b] + k #mat is a matrix of 5 zeros. #mat = [0, 0, 0, 0, 0]. #Each time a value (k) will be added to all the elements between starting and ending index } ,第二个是mat,第三个是n

N.B.:a、b、k、n和第一行的第一个数字的值可能会有所不同。

输出:

[100,200,200,200,100]

修改后的代码

a

b上方提供了示例输入,如下所示:

k

谢谢。

1 个答案:

答案 0 :(得分:1)

好的,这是一个猜测,但是如果我正确地收到了您的请求和您的数据结构,则应该可以:

matadd<- function(line) {
  a<-as.numeric(line[1])
  b<-as.numeric(line[2])
  k<-as.numeric(line[3])
  mat[1,a:b]<<-mat[1,a:b]+k
}
# Create the matrix with all zeros
mat<-matrix(0,nrow=1,ncol=as.numeric(line[[1]][1]))
# sapply the function on rows 2 thru end of the list
sapply(line[2:(as.numeric(line[[1]][2])+1)],matadd)

实际上我可以只使用列表中的length,想一想...

例如,对于line<-list(c(5,2),c(2,3,5),c(1,4,2)),结果如下:

  
    

垫子

  
      [,1] [,2] [,3] [,4] [,5] 

 [1,]   2    7    7    2    0