如何在 R 中存储 for 循环的每个输出?

How to store each output of a for loop in R?

提问人:Jack 提问时间:4/26/2023 最后编辑:L TyroneJack 更新时间:4/27/2023 访问量:33

问:

我需要将每个输出(从 1 到 1000)存储为一行。

到目前为止,我有:

n<-1000
for(n in 1:n) {
  count <- 0
  check <- ifelse(n>1, TRUE, FALSE)
  while(check) {
    if (n%%2==1) {
      n=3*n+1
    } else {
      n=n/2
    }
    count=count+1
    check<- ifelse(n>1, TRUE, FALSE)}
  print(count)
}    

但是不知道如何保存每个出来的数字,因为计数每次都会被覆盖。

R 循环 for 循环 while 循环

评论


答:

1赞 YH Jang 4/26/2023 #1

假设您想将 存储为向量。count

在此代码中,在 for 循环之前创建了一个空向量。result_vector

您可以将 附加到 ,而不是 。print(count)countresult_vector

n<-1000
result_vector <- c()
for(n in 1:n) {
  count<-0
  check<- ifelse(n>1, TRUE, FALSE)
  while(check) {
    if (n%%2==1) {n=3*n+1
    } else {n=n/2}
    count=count+1
    check<- ifelse(n>1, TRUE, FALSE)}
  result_vector <- c(result_vector, count)
}
0赞 Retired Data Munger 4/27/2023 #2

您可能需要考虑“咕噜咕噜”映射函数:

library(tidyverse)
n <- 1000

# use the 'map' functions in 'purrr' to create a vector instead
# of extending the vector in the loop
result_vector <- map_dbl(1:n, ~ {
  n <- .x  # save parameter in 'n' to keep code the same
  count <- 0
  check <- if (n > 1)
    TRUE
  else
    FALSE
  while (check) {
    if (n %% 2 == 1) {
      n = 3 * n + 1
    } else {
      n = n / 2
    }
    count = count + 1
    check <- if (n > 1)
      TRUE
    else
      FALSE
  }
  count
})