如何提取BSDA包normarea函数返回的曲线下面积数值用于运算?
解决normarea结果无法直接运算的问题
这个问题很常见——normarea()函数返回的不是单一数值,而是一个包含多个统计信息的列表对象,直接拿列表做数学运算自然会触发"非数值参数"的报错!下面是具体的解决步骤:
第一步:先搞清楚
normarea()返回的结构
你可以先运行这段代码查看返回对象的详细信息:library("BSDA") p <- normarea(0, 9.9, 10.5, 1.3) str(p) # 查看对象的具体结构 names(p) # 查看列表里的元素名称运行后你会发现,这个列表里包含了
Lower.Area、Upper.Area、Mean、SD等元素,你需要的0.3222就是Lower.Area对应的数值。第二步:提取数值元素再做运算
只要在赋值时指定列表的元素名,就能拿到纯数值,之后正常做乘法就没问题了:library("BSDA") # 直接提取Lower.Area的数值 p <- normarea(0, 9.9, 10.5, 1.3)$Lower.Area q <- p * 100 q # 输出结果就是32.22小技巧:记不清元素名?用
unlist()转向量也行
要是懒得记元素名,也可以把列表转成数值向量再提取(不过更推荐用元素名,可读性更强):p_vec <- unlist(normarea(0, 9.9, 10.5, 1.3)) p <- p_vec["Lower.Area"] q <- p * 100 q
总结一下:核心就是要从normarea()返回的列表中,提取出你需要的具体数值元素,而不是直接用整个列表进行数学运算~
内容的提问来源于stack exchange,提问作者Krantz
相关产品推荐
相关产品推荐

