如何使用for循环来简化代码?

如何使用for循环来简化代码?,r,R,我想要一个带有下一个值列表的数据帧: a <- Data[1,2] b <- Data[2,3] c <- Data[3,4] d <- Data[4,5] df <- data.frame(c(a,b,c,d)) a对于loop1,您不需要。而是: 当通过[单个参数]对数组进行索引时,i可以是一个矩阵,其列数与x的维数相同;结果是一个向量,其元素对应于i的每一行中的索引集 用所需的i和j索引替换1:4和2:5 如果使用成对(i,j)索引更方便,还可以为它们生成矩

我想要一个带有下一个值列表的数据帧:

a <- Data[1,2]
b <- Data[2,3]
c <- Data[3,4]
d <- Data[4,5]
df <- data.frame(c(a,b,c,d))

a对于
loop1,您不需要
。而是:

当通过[单个参数]对数组进行索引时,i可以是一个矩阵,其列数与x的维数相同;结果是一个向量,其元素对应于i的每一行中的索引集

用所需的i和j索引替换
1:4
2:5

如果使用成对(i,j)索引更方便,还可以为它们生成矩阵,只需传递
byrow=TRUE

index = matrix(c(
    c(1L, 2L),
    c(2L, 3L),
    c(3L, 4L),
    c(4L, 5L)
), ncol = 2L, byrow = TRUE)

1作为一般规则,
for
循环是R中的最后一种手段。它们有有效的用途,但通常会使代码变得比必要的更复杂。在许多情况下(如上所述),您可以不进行任何形式的迭代就可以离开。如果您需要迭代,您的第一个调用端口应该是特定的、合适的向量算法(例如
cumsum
)。如果没有合适的算法,则下一步转到更高阶的列表函数(如
lappy
/
vapply
/
Reduce
/
Filter
或“purrr”包中的等效功能)

只有当这些操作都不适用时,才应求助于
for
循环。

您可以尝试

diag(as.matrix(Data[1:4,-1]))
因此


也许您可以使用
col
+
row

> df <- data.frame(number = Data[col(Data)-row(Data)==1])

> df
     number
1 0.8983897
2 0.1765568
3 0.9919061
4 0.1255551

如果您创建一个小的可复制示例以及预期的输出,那么会更容易提供帮助。请阅读。您说您想要一个数据帧(您的变量称为
df
)但是你想要的结果是一个向量。它是什么?啊,我明白了,我指的是一个数据帧。我会编辑question@Irene232545如果你认为这个答案有用,请考虑接受。
diag(as.matrix(Data[1:4,-1]))
df = data.frame(number = diag(as.matrix(Data[1:4,-1])))
> df <- data.frame(number = Data[col(Data)-row(Data)==1])

> df
     number
1 0.8983897
2 0.1765568
3 0.9919061
4 0.1255551
> Data
          [,1]       [,2]      [,3]      [,4]
[1,] 0.2655087 0.89838968 0.2059746 0.4976992
[2,] 0.3721239 0.94467527 0.1765568 0.7176185
[3,] 0.5728534 0.66079779 0.6870228 0.9919061
[4,] 0.9082078 0.62911404 0.3841037 0.3800352
[5,] 0.2016819 0.06178627 0.7698414 0.7774452
          [,5]
[1,] 0.9347052
[2,] 0.2121425
[3,] 0.6516738
[4,] 0.1255551
[5,] 0.2672207