我有一个包含许多参数的数据框。为了方便起见,我用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".
请帮我找错。
答案 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)