如何在R中将命名数值与列表组合为数据框并按误差排序
问题
我有两个列表:
errors:从nls模型中提取的带命名的数值列表,生成代码如下:
error = coef(summary(m1))[, "Std. Error"][2] errors[i] = list(error)
dput(head(errors))输出:
list(c(D = 95.0366316885139), c(D = 4.39970337894091), c(D = 1.64857187195367), c(D = 1.03736644269342), c(D = 2.78859988152878), c(D = 1.01132604633924))
depths:通过for循环生成的排序后的数值列表,生成代码如下:
depth= c(runif(n=1, min=0.01, max = 6), runif(n=7, min=0.01, max = 20)) depth<- sort(depth) depths[i] = list(depth)
dput(head(depths))输出:
list(c(2.8757584432466, 3.13134194160812, 5.00666030655848, 5.6528061668016, 8.0060998139251, 9.94408561721444, 10.6993738641054, 15.2280608629016 ), c(1.83155859559774, 2.02404017815599, 3.05270053320797, 3.399602308881, 3.99466107267654, 6.86905775453197, 9.99144606708782, 12.6899819255993 ), c(0.152889687146526, 2.26179468018236, 4.04482247331412, 6.49030452670995, 7.20269280388486, 7.59870912223589, 11.7817946268013, 19.7157878024434 ), c(0.035487746600993, 1.62364501114469, 2.3377970061847, 3.21925386766437, 11.0224696304742, 13.4517430908256, 13.596371483712, 19.2027612853702 ), c(1.06988511229167, 1.98849752927432, 6.25664629776496, 6.75547244368819, 8.52860158402473, 8.91922583458247, 12.7884758723271, 17.5239637604193 ), c(0.449312659096904, 1.99825130865211, 2.59652451965958, 5.30261293693446, 5.44435022322228, 7.49861600056523, 11.1952574270428, 14.1488220158126 ))
尝试用comparison = data.frame(errors, depths)合并时,没有生成预期的两列,而是大量重复列。需要将两个列表合并为数据框,让errors的第i个值对应depths的第i个条目,并按误差值排序,查看不同深度对应的误差大小。
解决方案
步骤1:清理errors列表,提取数值并移除名称
errors的每个元素都是带命名的向量,先提取数值并去掉名称:
clean_errors <- sapply(errors, function(x) unname(x))
步骤2:合并为数据框
使用I()函数保留depths的列表结构,生成包含两列的 data frame:
comparison <- data.frame( error = clean_errors, depths = I(depths) )
步骤3:按误差值排序
用order()对数据框按error列排序:
sorted_comparison <- comparison[order(comparison$error), ]
验证结果
查看排序后的前几行:
head(sorted_comparison)
将得到按误差从小到大排列的结果,每一行对应一组误差值和对应的深度列表。
内容的提问来源于stack exchange,提问作者stats_123
相关产品推荐
相关产品推荐

