【问题标题】:I am new to r. I am trying to make my code less complicated by using a for loop我是新来的。我试图通过使用 for 循环使我的代码不那么复杂
【发布时间】:2020-11-12 19:52:25
【问题描述】:

这是我当前的代码...我可以将其设为 for 循环吗?

#sample1, sample2, …, sample6 where samplei is sampling 10^(ith)
sample1 <- abs(rnorm(10)) #use abs because bellcurve is + and -
sample2 <- abs(rnorm(10^2))
sample3 <- abs(rnorm(10^3))
  sample <- abs(rnorm(10^4))
  sample5 <- abs(rnorm(10^5))
  sample6 <- abs(rnorm(10^6))

【问题讨论】:

  • sapply(1:6, function(x)abs(rnorm(10^x)))

标签: r loops for-loop


【解决方案1】:

如果您还想将其分配给 6 个不同的变量,您需要这样做:

n = 6
invisible(sapply(1:n, function(i) assign(x = paste("sample", i, sep = ""), 
                                         value = abs(rnorm(10^i)),
                                         envir = .GlobalEnv)))

或者使用 for 循环:

for(i in 1:n)
{
  assign(x = paste("sample", i, sep = ""), value = abs(rnorm(10^i)), envir = .GlobalEnv)
}

但将其存储为列表更有意义,例如:

samples = lapply(1:6, function(i) abs(rnorm(10^i)))

【讨论】:

    【解决方案2】:

    R 非常擅长矢量化,这意味着几乎在您尝试使用 for 循环的任何时候,都有更好/更快的方法来实现它。我会将您的示例重写为:

    samples <- abs(rnorm(10^seq(6)))
    

    然后可以通过samples[1] 等方式访问每个样本。

    【讨论】:

    • 这是不正确的。如果 n 是向量,则使用向量的长度,即 rnorm(1:3) 与 rnorm(3) 相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2015-01-14
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多