【上一篇:80.关于循环迭代】
【下一篇:82.关于使用for循环时的四种问题及解决方案】
常规的for 循环
正如上文中的for循环示例,一个for循环包含三个部分:1)output;2)sequence;3)body。
output <- vector("double", ncol(df)) # 1. output
for (i in seq_along(df)) { # 2. sequence
output[[i]] <- median(df[[i]]) # 3. body
}
output
1)output:output <- vector("double", length(x)),在开始循环之前,你必须始终为输出分配足够的空间,这对效率来说非常重要:如果你使用c()(例如)在每次迭代时增加for loop,你的for循环将会非常慢。所以在这里,使用vector()函数创建了一个指定长度的向量。
2)sequence:i in seq_along(df),for loop的每次run都将i赋给来自seq_along(df)的不同值。这里的i可以看做it。
3)body:output[[i]] <- median(df[[i]]),每次迭代后的结果赋值。
for循环的变形
上述基本的for循环包含三个部分,特点是输入长度已知,输出长度已知,基于索引进行循环对列进行操作,且输出是一个新的对象---一个新向量,这样的for循环远远不能满足我们的需要。因此,有了四种变形的for循环:
1. Modifying an existing object, instead of creating a new object.(修改已存在的对象,而不是创建新对象)
2. Looping over names or values, instead of indices.(基于names或values循环,而不是索引)
3. Handling outputs of unknown length.(处理未知长度的输出)
4. Handling sequences of unknown length.(处理未知长度的sequence-见上文的解释)
这些变形很常见,下一篇将详细讲。
网友评论