R语言中if-else表达式语句顺序变更导致结果差异的原因咨询
R语言if-else分支表达式顺序差异的解释
先明确两个核心规则:
print()是主动输出函数,只要执行就会在控制台打印内容,和它在代码块中的位置无关。- 在R的交互环境中,未被赋值的表达式计算结果,如果是代码块(花括号包裹)里的最后一个表达式,会被自动打印到控制台;如果不是最后一个,计算过程会执行,但结果不会显示。
代码#1的执行逻辑
d <- 12 if (d > 100) { print("d is greater than 100") } else { d + 20 # 计算得到32,但不是代码块最后一个表达式,结果不显示 print("d is smaller than 100") # 主动打印内容,控制台输出这句话 }
这里d + 20确实执行了,算出了32,但因为它不是else分支代码块的最后一个表达式,且没有被赋值给任何变量,所以交互环境不会自动打印这个结果;而print()语句是主动输出,所以最终只看到打印的字符串。
代码#2的执行逻辑
d <- 12 if (d > 100) { print("d is greater than 100") } else { print("d is smaller than 100") # 主动打印内容,控制台先输出这句话 d + 20 # 是代码块最后一个表达式,未被赋值,交互环境自动打印结果32 }
这里print()语句先执行并输出字符串,随后d + 20作为代码块的最后一个表达式,其计算结果32没有被赋值,所以交互环境自动把这个结果打印出来,因此会看到两行输出。
你提到的“复合表达式的值为最后一个表达式的值”是对的,代码1的else分支复合表达式的值是print()的返回值(即打印的字符串),代码2的else分支复合表达式的值是d + 20的结果32;差异的核心是交互环境对未赋值的最后表达式的自动打印行为,以及print()主动输出的区别——前者是环境自动触发的显示,后者是函数主动执行的输出。
内容的提问来源于stack exchange,提问作者Phung Doan
相关产品推荐
相关产品推荐

