for 循环中的计算,其变量仅在其名称的最后一个索引号上有所不同,在 R 中



我有以下代码。我希望将某些计算需要用m1m2m3 m4变量分配给i1i2i3i4变量。因此,我没有进行四次计算,而是尝试使用 for 循环进行计算。

在for循环中,我尝试将m1m2m3m4变量分配给一个m变量,该变量稍后将执行i1i4变量所需的计算。

但是,使用 paste() 函数时会出现问题,因为它返回的是字符而不是变量。

问题:

1.如何使用粘贴函数返回变量?

2.如果不可能,我怎样才能使用仅在最后一个数字上不同的变量进行多次计算。

B_zap <- 3
L_zap <- 4.5
B <- 1.5
L <- 2.25
z <- 3

(m1 <- B / z)
(n1 <- L /z)
(m2 <- (B_zap - B) / z)
(n2 <- L /z)

(m3 <- (B_zap - B) / z)
(n3 <- (L_zap - L) / z)

(m4 <- B / z)
(n4 <- (L_zap - L) / z)

for(i in 1:4) {
m <- paste("m", i, sep = "")
n <- paste("n", i, sep = "")
(i1 <- 2 * m *n * (m^2 +n^2 +1) ^0.5 )
(i2 <- m^2 + n^2 +(m^2 * n^2) + 1)
(i3 <- m^2 + n^2 +2)
(i4 <- i3-1)

}

您可以利用 R 的矢量化并将所有这些内容放入数据帧中,而不是 for 循环。

首先,您可以将所需的数量放入具有m列和n列的数据帧中,这些列的定义方式在示例中。

library(dplyr)
B_zap <- 3
L_zap <- 4.5
B <- 1.5
L <- 2.25
z <- 3
df <- data_frame(m = c(B / z, (B_zap - B) / z, (B_zap - B) / z, B / z),
                 n = c(L /z, L /z, (L_zap - L) / z, (L_zap - L) / z))

然后,您可以使用mutate()创建新列,这些列根据您已有的数量计算您感兴趣的新数量。

df %>%
    mutate(index = row_number(), 
           i1 = 2 * m *n * (m^2 +n^2 +1) ^ 0.5,
           i2 = m^2 + n^2 +(m^2 * n^2) + 1,
           i3 = m^2 + n^2 +2,
           i4 = i3 - 1)
#> # A tibble: 4 × 7
#>       m     n index       i1       i2     i3     i4
#>   <dbl> <dbl> <int>    <dbl>    <dbl>  <dbl>  <dbl>
#> 1   0.5  0.75     1 1.009718 1.953125 2.8125 1.8125
#> 2   0.5  0.75     2 1.009718 1.953125 2.8125 1.8125
#> 3   0.5  0.75     3 1.009718 1.953125 2.8125 1.8125
#> 4   0.5  0.75     4 1.009718 1.953125 2.8125 1.8125

最新更新