for 循环中的错误,用于模拟具有负差异分数的数据作为行

Error in for-loop for simulating data with negative difference scores as rows

提问人:Anne 提问时间:6/30/2021 更新时间:7/6/2021 访问量:29

问:

我想运行一个for循环来模拟一些数据,但遇到了错误。 一般的想法是,我想模拟公式:(D-A)/K。

D 和 A 可以在 0 和 10 的值之间变化。K 可以在 0 到 150 的值之间变化。 我想要一个输出矩阵/数据帧,对于每个级别的 K(150 列),行上每个可能的 D-A 组合(21 行,值在 -10 和 +10 之间变化)的差异。

我写了这段代码:

D = c(0:10)
A = c(0:10)
K = c(0:150)

output=matrix(NA)

for (d in 0:10){
  for (a in 0:10){
    for (k in 0:150){
      output[i-j,k]=(D[d]-A[a])/K[k]
    }
  }
}

但它不起作用,我认为是因为子集 [i-j] 在某些情况下会给出负行号(例如 D[2] - A[5])。我不知道如何解决这个问题。A、D 和 K 的值是固定的。

R for 循环 子集

评论


答:

1赞 Limey 6/30/2021 #1

你是对的:你的指数计算给出了负指数,这是没有帮助的。

我会完全避免循环。这是否能满足您的需求:

library(tidyverse)

df <- tibble() %>% 
        expand(K=1:150, A=0:10, D=0:10) %>% 
        mutate(Y=(D-A)/K)
df
# A tibble: 18,150 x 4
       K     A     D     Y
   <int> <int> <int> <dbl>
 1     1     0     0     0
 2     1     0     1     1
 3     1     0     2     2
 4     1     0     3     3
 5     1     0     4     4
 6     1     0     5     5
 7     1     0     6     6
 8     1     0     7     7
 9     1     0     8     8
10     1     0     9     9
# … with 18,140 more rows

注意:我更改了 由于除以也有问题。K0

这应该为您提供 0 到 10 之间的 A 和 D 的每个值以及 1 到 150 之间的 K 值的 (D - A) / K 值。即 11 x 11 x 150 = 18150 个组合。