R相当于在Python中对空列表执行操作?

2024-10-02 20:43:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试将python中的代码复制到R等价物中,但遇到了一些问题。我正在尝试向空列表添加一个向量,这在python中似乎很容易做到,但是在R中找到正确的空列表是一个挑战

我认为R等价物的问题在于为S1确定正确的空列表,该列表的向量长度与PE相同,因为python似乎没有压力。我曾尝试使用vector()rep()函数并指定所需的731长度,但R不允许我对其执行任何操作,错误消息正确地显示为Error in S1[i - 1] + DS : non-numeric argument to binary operator。在这方面,有没有一种简单的方法可以让空列表变成数字

请注意,所描绘的PE对应于长度为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代码示例中最后一行代码所示

如蒙协助,将不胜感激


Tags: 代码列表s3dsfloatmin向量temp
1条回答
网友
1楼 · 发布于 2024-10-02 20:43:57

Python S1 = []; S1.append(x)在R中的等价物是S1 <- list(); S1 <- c(S1, list(x))在R中

在您的示例中c(S1, x)将起作用,因为您尝试附加的数值将自动包装在列表中,但是显式地这样做更安全。如果x已经是一个列表,那么c(S1, x)将把它的元素附加到S1,而c(S1, list(x))将把包含x副本的单个条目附加到S1

您可以在R中使用append()函数,但请记住,R函数很少修改其参数,因此您可以编写

S1 <- append(S1, list(x))

在这种情况下,它基本上与c()相同

相关问题 更多 >