2017-08-02 60 views
0

我有一個包含許多參數的數據框。爲了方便起見,我用3列做了一個例子。第一個由單位組成,第二個由給定的參數組成,第三個由計算的數字組成。我想要的是: - 一個合適的方式來存儲單位和數字 - 一個功能,使表變化的參數(如第二個例子,風速3和4米/秒)。添加一個可以同時改變參數windspeed和density的函數會很酷。 現在我有一些有效的代碼。不幸的是我必須逐行處理它。對於20種不同的風速,我認爲這是很多不必要的工作。使用函數計算(錯誤:找不到對象)

aa <- as.data.frame(matrix(seq(100),nrow=6,ncol=3)) 

aa$V1 <- c("v (m/s)","Cd()", "d (m)", "A (m^2)", "N/(W*L)", "V(m/s)") 

aa$V2 <- c("1", # v 
    "2", # Cd 
    "3",  # d 
    "4", # MW/km^2 
    "5", # Height 
    "6" # coefficient 
) 

aa$V3[1] <- as.numeric(as.numeric(aa[4,2])^2) 
aa$V3[2] <- as.numeric(as.numeric(aa[1,2]) + as.numeric(aa[2,2])) 
aa$V3[3] <- as.numeric(as.numeric(aa[1,2]) * as.numeric(aa[2,2])) 
aa$V3[4] <- as.numeric(as.numeric(aa[1,2]) + as.numeric(aa[2,2]) +  
as.numeric(aa[3,2])) 
aa$V3[5] <- as.numeric(as.numeric(aa[2,2]) + as.numeric(aa[2,3])) 
aa$V3[6] <- as.numeric(as.numeric(aa[1,3]) + as.numeric(aa[2,3])) 

我已經得到我想要的東西是這樣的:

speed_vector <- c("w_sp_3" = 3, "w_sp_4" = 4) 
make_speed <- function(x) 
{ 

V1 <- c("v (m/s)","density (kg/m^3)","Cd()", "d (m)", "A (m^2)", "N/(W*L)", 
"V(m/s)") 

V2 <- c(speed_vector[x], # v 
     "1",  # density 
     "2", # Cd 
     "3",  # d 
     "4", # MW/km^2 
     "5", # Height 
     "6" # coefficient 
    ) 

V3 <- c(as.numeric(as.numeric(V2[4])^2), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) * as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2]) + as.numeric(V2[3])), 
     as.numeric(as.numeric(V2[2]) + as.numeric(V3[2])), 
     as.numeric(as.numeric(V3[1]) + as.numeric(V3[2]))) 


zz <- data.frame(V1,V2,V3) 
return(zz) 
} 

w_speed_3 <- make_speed("w_sp_3") 
w_speed_4 <- make_speed("w_sp_4") 

現在我得到如下:

"Error in make_speed("w_sp_3") : object 'V3' not found".

請幫我發現其中的錯誤。

+0

我真的不明白你正在試圖做的,所以我不能多幫什麼,但在你的'make_speed'功能創建V3'的'你是指到最後兩行中的'V3'。 'V3'尚未定義,因此無法找到並且出現錯誤。 –

+0

是的,在您分配V3時,您正在參考V3。 – Balter

+0

@OriolMirosa:謝謝你的回答。我只是嘗試使用更改的參數進行計算,並將其存儲在列表,data.frame或類似的東西中。 – Baldrian

回答

0

我覺得你的問題在於以下語法中:

V3 <- c(as.numeric(as.numeric(V2[4])^2), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) * as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2]) + as.numeric(V2[3])), 
     as.numeric(as.numeric(V2[2]) + as.numeric(V3[2])), 
     as.numeric(as.numeric(V3[1]) + as.numeric(V3[2]))) 

你定義的對象V3作爲載體,但在向量的最後兩行,你引用V3本身,V3之前存在。換句話說,您正嘗試使用尚未定義的對象(V3)來定義V3。

編輯:

make_speed <- function(v){ 

    V1 <- c("v (m/s)","density (kg/m^3)","Cd()", "d (m)", "A (m^2)", "N/(W*L)", 
    "V(m/s)") 

    V2 <- c(v, # velocity 
      "1",  # density 
      "2", # Cd 
      "3",  # d 
      "4", # MW/km^2 
      "5", # Height 
      "6" # coefficient 
     ) 

    V3 <- c(as.numeric(V2[4])^2, 
      as.numeric(V2[1]) + as.numeric(V2[2]), 
      as.numeric(V2[1]) * as.numeric(V2[2]), 
      as.numeric(V2[1]) + as.numeric(V2[2]) + as.numeric(V2[3]), 
      as.numeric(V2[2]) + as.numeric(V2[1]) + as.numeric(V2[2]), 
      as.numeric(V2[4])^2 + as.numeric(V2[1]) + as.numeric(V2[2]), 
      NA) # The other vectors have 7 items, V3 only has 6 in your example 

    return(data.frame(V1,V2,V3)) 
} 

w_speed_3 <- make_speed(v = 3) 
w_speed_4 <- make_speed(v = 4) 
+0

感謝您的回答。我已經有了這個想法,但我真的不知道如何解決這個問題。 – Baldrian

+0

我的意思是如果你看看第一個例子,它就會起作用。我只想把第一個例子放到一個函數中,並添加兩個變化參數(例如「w_speed_3」和「density_5」) – Baldrian

+0

對不起,如果我不能清楚地描述我的問題。請看看上面的評論。他們可能會給你一個想法,我想要什麼。 – Baldrian