对于下面的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
+ }
+ }
答案 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