我需要在数据框中创建一个新变量,该变量是带有许多嵌套括号的方程式的输出。该方程的一部分以下面最后一行的形式
temp=36
Tc = 647.097
( ( 1-273.15+temp )/Tc )^1.5
其中temp将是一个变量,而Tc将是一个常数。但是,当我运行代码时,结果始终为“ NA”。
但是,如果我将代码分解成我知道结果的数字
( 1-273.15+temp )/Tc
然后像这样添加指数
-0.3649376^1.5
然后代码按预期工作。
为什么R无法正确输出计算((1-273.15 + temp)/ Tc)^ 1.5?
更重要的是,如何在保留常量和变量对对象的使用的同时,让R获得((1-273.15 + temp)/ Tc)^ 1.5的结果?
我需要解决这个问题,因为完整的方程式甚至更糟,我上面描述的问题嵌套在其中:
e_sat_test <-Pc ^((Tc /(273.15 + temp))*(a1 *((1-273.15 + temp)/ Tc)+ a2 *((1-273.15 + temp)/ Tc)^ 1.5 + a3 *((1-273.15 + temp)/ Tc)^ 3 + a4 *((1-273.15 + temp)/ Tc)^ 3.5 + a5 *((1-273.15 + temp)/ Tc)^ 4 + a6 * ((1-273.15 + temp)/ Tc)^ 7.5))
答案 0 :(得分:2)
问题是
-0.3649376^1.5
被解释为
-(0.3649376^1.5)
不是
(-0.3649376)^1.5
因为指数运算符具有更高的优先级。当您对.5指数取某物时,就像取平方根,并且这些并未为R中的简单数值向量定义(除非您想使用虚数)。因为您的结果不是真实的,所以您对数据值的计算只是NaN。您可能要再次检查公式,
答案 1 :(得分:0)
有时,用户会对返回的值感到惊讶,例如为什么(-8)^(1/3)是NaN。对于双输入,R在所有平台上均使用IEC 60559算法,并为^运算符使用C系统功能。相关标准定义了许多极端情况下的结果。特别地,以上示例中的结果由C99标准强制执行。在许多类似Unix的系统上,man pow命令会在大量极端情况下提供值的详细信息。