【发布时间】:2016-07-03 22:26:35
【问题描述】:
我正在编写一个有 n 层的盒子模型。我想为我在盒子模型中定义的每一层生成一个数据框,并在每个数据框的每一列中执行计算。我已经使用以下代码初始化了数据框:
##Initialize layer energy+water balance dataframes
calcs <- c("Vwin", "Vwout", "Vsin","Vsout","Pistd","Vwnet","Psin","Psout","Vw","Vemax","Sw","Cp","Kt","Qwout","Qtop","Qbot","Qsides","Qnet","Tavg")
layer_tabs<-list()
for(i in 2:(layers-1)){
nam <- paste("layer_",i,sep = "")
assign(nam,data.frame(matrix(vector(),t,length(calcs),dimnames = list(c(),calcs))))
append(layer_tabs, nam=nam)
}
现在,对于在我的 calcs 向量中命名的每一列,我需要在每一层数据帧中执行特定的计算。我想将生成的图层数据帧附加到我可以循环的列表中,或者在其上使用应用函数,然后为每列编写函数/方程,或者使用变量名称中的数字循环遍历数据帧.我尝试将生成的数据框附加到空列表“layer_tabs”返回错误:
Error in append(layer_tabs, nam = nam) : unused argument (nam = nam)
【问题讨论】:
-
尝试阅读帮助页面,
?append,以确定该功能是否满足您的需求,以及如何使用它。 -
错误信息是因为
append中没有名为nam的参数。此外,您的layer_tabs对象没有更新,因为您必须在每次修改时分配结果,layer_tabs <- append(layer_tabs, nam)。 -
您不应该使用
assign或append。我绝对确定只要在您的代码中看到这两个函数,就会有一个更具可读性和更有效的解决方案(针对您的实际问题)。
标签: r