【发布时间】:2020-05-27 07:07:27
【问题描述】:
(1,2,2,3,3,3,4,4,4,4,...,n,...,n)
我想通过 for 循环制作上述向量,但不使用 rep 函数或其他函数。这可能不是在 stackoverflow 中提出的好问题,但由于我是 R 的新手,我敢在这里寻求帮助。
(可以假设向量的长度是10)
【问题讨论】:
-
可以使用哪些功能?
(1,2,2,3,3,3,4,4,4,4,...,n,...,n)
我想通过 for 循环制作上述向量,但不使用 rep 函数或其他函数。这可能不是在 stackoverflow 中提出的好问题,但由于我是 R 的新手,我敢在这里寻求帮助。
(可以假设向量的长度是10)
【问题讨论】:
使用for 循环,可以使用
n <- 10
out <- c()
for(i in seq_len(n)){
for(j in seq_len(i)) {
out <- c(out, i)
}
}
在R,否则,可以这样做
rep(seq_len(n), seq_len(n))
【讨论】:
rep() 和 seq() speedwise?
我已经被@akrun 打败了几秒钟,即使如此,我还是想给你一些提示如果使用rep 是可能的,这可能对你使用 R 有所帮助。 (不使用rep,看@akrun)
简答使用rep
rep(1:n, 1:n)
长答案使用rep
在发布问题之前,您应该尝试开发自己的解决方案并分享它们。 尝试谷歌搜索并分享您已经找到的内容通常也很好。请看"help/how-to-ask"
让我们一起努力吧。 首先,我们应该尝试看看官方来源:
?func_name
从前两个(以及其他来源)中,您会发现两个有趣的函数:
: 运算符:可用于生成从a 到b 的整数序列,如a:b。例如,输入 1:3 会为您提供 1, 2, 3 向量rep(x, t) 是一个函数,可用于复制项目 x t 次。您还需要知道 R 是“面向向量的”,即它在向量上应用函数,而无需键入显式循环。
例如,如果你调用repl(1:3, 2),它(几乎)相当于运行:
for(i in 1:3)
rep(i, 2)
通过结合前面两个函数和 R 是“面向向量”的概念,你得到了rep(1:n, 1:n) 解决方案。
【讨论】:
我不知道你为什么不想使用rep,但这里有一种方法,在循环中不使用它或任何类似于rep 的函数。
`for (i in 1:10){
a<-NA
a[1:i] <- i
if (i==1){b<-a}
else if (i >1){b <- c(b,a)}
assign("OutputVector",b,envir = .GlobalEnv)
}`
`OutputVector`
选择 10 的 n 似乎是主观的,所以我只是对数字 1 到 10 进行了循环,如果你愿意,你可以取向量中的前 10 个数字。 OutputVector[1:10]
【讨论】:
您可以使用单个循环来执行此操作,尽管它是 while 而不是 for
n <- 10
x <- 1;
i <- 2;
while(i <= n)
{
x <- c(x, 1/i);
if(sum(x) %% 1 == 0) i = i + 1;
}
1/x
【讨论】: