For循环仅返回最后一个值

时间:2020-02-17 10:50:37

标签: r

对于下面的for循环,我可以查看所有值。但是,当我为它分配新对象时,返回的值仅是最后一个(请参阅最后一个代码)。任何人都可以在这里帮助我。不可能为所有显示的值分配一个值吗?

for(i in 1:5)
+ {
+     for(j in 1:2)
+     {
+         print(i*j);
+     }
+ }

分配了一个对象。

for(i in 1:5)
+ {
+     for(j in 1:2)
+     {
+         as <- i*j
+     }
+ }

3 个答案:

答案 0 :(得分:2)

这是一种典型的R方法:

as.vector(seq(1:2)%*%t(seq(1:5)))

[1]  1  2  2  4  3  6  4  8  5 10

此方法采用[1,2]t[1,2,3,4,5]之间的点积。它没有使用显式循环,而是使用向量来表示两个原始循环的边界。中间结果是一个矩阵,根据循环的边界,我们可以轻松地按列或行顺序将其转换为一维向量。

答案 1 :(得分:1)

for循环方法

如果要将新值附加到as,可以尝试用as更新as <- c(as,i*j),这会将i*j与现有as和结果分配给as,即

as <- c()
for(i in 1:5)
{
     for(j in 1:2)
     {
         as <- c(as,i*j)
     }
}

outer方法

一种实现相同目标的更有效方法是使用outer,即

as <- c(t(outer(1:5,1:2)))

答案 2 :(得分:0)

因此,for循环在这里效率很低。您应该将向量相乘。例如

 rep(1:5, each = 2)

给你

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

如果将其乘以

1:2

较短的向量被回收,您会得到:

rep(1:5, each = 2) * 1:2
[1]  1  2  2  4  3  6  4  8  5 10