2017-05-08 27 views
0

我有以下代码。我希望分配给i1i2,i3,i4变量某些计算需要用m1,m2,m3,m4变量完成。因此,我没有做四次计算,而是尝试使用for循环。计算里面的for循环变量,只有在他们的名字的最后索引号不同,在R

在for循环中,我试图分配m1m2m3m4变量的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) 


} 
+0

你可能会寻找'得到()''为I = 1; get(paste0(“m”,i))' – tictocchoc

回答

0

而不是一个for循环,你可以利用R的矢量化,把这一切都放入数据框。

首先,您可以将需要的数量放入数据框中,并使用mn列,按您在示例中的方式定义数据。

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