使用函数计算(错误:找不到对象)

时间:2017-08-02 13:56:38

标签: r

我有一个包含许多参数的数据框。为了方便起见,我用3列做了一个例子。第一个由单位组成,第二个由给定的参数组成,第三个由计算的数字组成。我想要的是以下内容: - 存储单位和数字的合适方式 - 使表格具有变化参数的功能(如第二个示例,风速为3和4 m / s)。添加一个同时改变参数windspeed和密度的功能会很酷。 现在我有一些有效的代码。不幸的是,我必须逐行处理它。对于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".

请帮我找错。

1 个答案:

答案 0 :(得分: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)