我一直在嘗試將 python 中的代碼復制到 R 等價物,但遇到了一些麻煩。我正在嘗試將一個向量添加到一個空串列中,這似乎可以在 python 中輕松完成,但在 R 中找到正確的空串列具有挑戰性。
我認為 R 等效項的問題是確定正確的空串列S1,其向量長度與Pand相同E,因為 python 似乎可以無壓力地做到這一點。我已經嘗試使用vector()和rep()函式并指定所需的長度為 731,但 R 不會讓我對其執行任何操作,并且錯誤訊息是正確的 Error in S1[i - 1] DS : non-numeric argument to binary operator。在這方面有沒有一種簡單的方法來制作一個空串列數字?
請注意,所描繪的P并E對應于長度為 731 的外部降雨資料(來自 CSV)。
python等價物如下所示:
A1 = float(0.134)
A2 = float(0.433)
A3 = float(0.433)
C1 = float(7)
C2 = float(70)
C3 = float(150)
S1 = []; S2 = []; S3 = []
Total_Excess = []
for i in range(1,dims[0]):
dS = P[i]-E[i]
S1_temp = max(S1[i-1] dS,0)
S1_Excess = max(S1_temp-C1,0)
S1.append(min(S1_temp,C1))
S2_temp = max(S2[i-1] dS,0)
S2_Excess = max(S2_temp-C2,0)
S2.append(min(S2_temp,C2))
S3_temp = max(S3[i-1] dS,0)
S3_Excess = max(S3_temp-C3,0)
S3.append(min(S3_temp,C3))
Total_Excess.append((S1_Excess*A1) (S2_Excess*A2) (S3_Excess*A3))
卡住之前我寫的R代碼如下圖所示:
A1 <- 0.4
A2 <- 0.4
A3 <- 0.2
C1 <- 10
C2 <- 75
C3 <- 200
S1 <- list()
S2 <- list()
S3 <- list()
for(i in 1:nrow(df)){
DS <- P - E
S1_temp <- max(S1[i-1] DS, 0)
S1_excess <- max(S1_temp - C1)
append(S1, min(S1_temp,C1))
S2_temp <- max(S2[i-1] DS, 0)
S2_excess <- max(S1_temp - C1)
append(S2, min(S1_temp,C1))
...
第一部分運行后,我S1_temp在控制臺中呼叫,只得到一個長度為 1 的向量,顯然長度為 731。
另外,Total_excess如 python 代碼示例中的最后一行代碼所示,我將如何將空串列附加到結果向量中?
任何幫助將不勝感激。
uj5u.com熱心網友回復:
S1 = []; S1.append(x)RS1 <- list(); S1 <- c(S1, list(x))中的 Python 等價物在 R中。
在您的示例c(S1, x)中將起作用,因為您嘗試附加的數值將自動包裝在串列中,但顯式執行更安全。如果x已經是一個串列,c(S1, x)則將其元素附加到S1,同時c(S1, list(x))將附加一個包含xto副本的條目S1。
您可以append()在 R 中使用該函式,但請記住,R 函式很少修改其引數,因此您可以撰寫
S1 <- append(S1, list(x))
在這種情況下,它本質上與c().
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314363.html
