2017-05-08 28 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