2017-08-02 52 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