我在 R 编程的第一周,虽然我在解决特定问题方面取得了很大进展,但我需要更大规模的建议。
我有一个充满 CSV 格式数据文件的目录。文件名专门标识数据源。我需要导入数据,通过各种计算条件化数据,并保留每个文件的条件化结果以供分析和查看。我已经成功地学会了在单个文件的基础上打开和广泛地调整数据。调节导致多重计算输出。我需要自动化这个过程并根据各自的文件名动态命名结果。
由于每个文件的数据条件都是相同的,因此我编写了一个可以为每个文件调用的函数。我了解函数在它们自己的环境中运行,该环境在函数运行后消失。我可以使用粘贴动态命名变量来构建名称并分配以将结果分配给这些名称。当函数关闭时,这些分配将丢失。
我不确定单步执行所有文件并将所有单独的计算结果保留在工作区中的最佳方式。我知道我“应该”将函数输出写入一个列表,稍后我可以对其进行索引。但是,我会有数百个计算结果,以后的索引会很复杂。假设其中两个文件包含不同位置的气温测量值。由于我根据描述性文件名动态命名计算结果,因此我可以将结果存储为 Temperature.Air.Location1 和 Temperature.Air.Location2。我更喜欢稍后通过简单地键入 Temperature.Air.Location1 - Temperature.Air.Location2 来计算温度增量的能力,而不必查找大列表的相应索引。
我确信有一种优雅的方式来实现这一点,这让我眼前一亮,但我担心我已经完全沉浸在学习 R 中的函数、插值和绘图中,以至于我忘记了大图。非常感谢任何建议。
编辑以添加示例代码 在函数的这一部分中,我将表格转换为 x、y、z 坐标以及对值进行插值。
CalibrationImport.Table <- function(filename, parametername, xmin, xmax, ymin, ymax){
Path.File <- paste0(Path.Folder,filename)
assign(parametername, read.csv(Path.File, header = FALSE))
# Extract x coordinates from original table
assign(paste0(parametername,".x"), get(parametername)[1, ])
assign(paste0(parametername,".x"), unlist(get(paste0(parametername,".x"))[-1], use.names=FALSE))
assign(paste0(parametername,".x"), c(t(replicate(nrow(get(parametername))-1, get(paste0(parametername,".x"))))))
# Extract y coordinates from original table
assign(paste0(parametername,".y"), get(parametername)[ ,1])
assign(paste0(parametername,".y"), unlist(get(paste0(parametername,".y"))[-1], use.names=FALSE))
assign(paste0(parametername,".y"), c(replicate(ncol(get(parametername))-1, get(paste0(parametername,".y")))))
# Extract data for original table
assign(paste0(parametername,".z"), unlist(get(parametername)[-1, -1], use.names=FALSE))
# Interpolate 100x100 surface
assign(paste0(parametername,".i"), interp(get(paste0(parametername,".x")), get(paste0(parametername,".y")), get(paste0(parametername,".z")),
xo=seq(xmin, xmax, length=100), yo=seq(ymin, ymax, length=100)))
}