我有以下代码。我希望将某些计算需要用m1
、m2
、m3
m4
变量分配给i1
、i2
、i3
、i4
变量。因此,我没有进行四次计算,而是尝试使用 for 循环进行计算。
在for循环中,我尝试将m1
,m2
,m3
,m4
变量分配给一个m
变量,该变量稍后将执行i1
到i4
变量所需的计算。
但是,使用 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