0

我想创建一个带有循环结果的数字向量,例如

> for (i in 1:5) print(i+1)
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6

没有'print'的相同表达式什么都不返回似乎很奇怪

> for (i in 1:5) i+1
>

有人有解释/解决方案吗?

4

2 回答 2

6

这是标准行为——当你说你想创建一个数字向量时, print不会那样做

for 循环中的表达式是原始函数的参数for

?`for`价值部分

for、while 和 repeat 不可见地返回 NULL。for 将 var 设置为 seq 的最后使用的元素,如果长度为零,则设置为 NULL。

print将结果打印到控制台。

for(i in 1:5) i + 1

只计算i + 1每次迭代并且不返回任何内容

如果你想分配一些东西,那么使用<-, 或者不太可取的方式分配它assign


您可以通过使用来避免显式循环sapply。这(应该)避免增长向量的任何陷阱

results <- sapply(1:5, function(i) { i + 1})
于 2012-11-09T01:10:09.740 回答
1

现在坦率地说,一定有比这更好的解决方案

loopee <- function(x){
  res <- vector(mode = "numeric", length(x))
  for (i in 1:x) {res[i] <- i+1}
  return(res)}

> loopee(5)
[1] 2 3 4 5 6
于 2012-11-09T01:12:48.150 回答