查看原文
其他

「我吃的盐比你吃的米还多」地球上谁都没资格跟你说这句话

KellyWeaver 知乎日报 2019-08-04

    

题图:全景视觉

  

常听人说「我吃的盐比你吃的米还多」,这真的有可能吗?

  

知友:KellyWeaver(2,500+ 赞同,路德维希-马克西米利安-慕尼黑大学流行病学硕士在读,营养学话题优秀回答者)



太长不看版总结:



只要你像个正常人那样吃米吃到小学毕业,那么整个地球上就不可能还有人有资格跟你说这句话了。


我们都知道,俗语是不能较真的。


但问题的关键是,我从小到大,每次我爹妈说不过我,他们就用这句话搪塞我!这让我一直忿忿不平!!


于是我还是一直梦想能有一天,我可以算出来他们到底是不是吃的盐比我吃的米还多,然后把结果拍他们脸上反驳回去。


然鹅,限于小学初中高中的我知识有限,我一直拿不出一个能令我爹妈信服的答案。


二十多年过去了,现在的我,已经在新中国的红旗下顺利成长成为了一个营养流行病学研究生。而巧合的是,我这门专业平时干的工作里,就有一部分是包括估计人们都吃些啥东西,每样东西都吃了多少。


因此!目前的我!终于具备这个知识储备和技术实力!对这个无聊的问题展开科学论证了!




定义一些前提条件



讨论任何问题,如果要想得到一个清晰的结论,我们都得要先定义清楚问题是什么。


「爸妈吃的盐到底有没有比我吃的米多」,这句话里有 4 个物体需要清晰定义:


  • 「爸妈」是什么?


为了简化问题的讨论,我们这里直接定义:这个问题下面,「爸妈」就以已经为我的沙雕脑洞献身第 N 次的中国籍 30 岁轻体力活动男子,群众演员小张老师作为代表。



但鉴于后面马上他鹅几也会出场,我决定后面都叫他老张。


  • 「吃的盐」是什么?


大家熟悉的盐,就是做饭的时候用勺子从盐袋子里舀进去的精制盐粒。但其实,如果论食盐的本质,也就是氯化钠,那来源可就多了去了。比如说,酱油里面就有氯化钠,豆瓣酱里面也有氯化钠,老干妈里面也有氯化钠;甚至除了这些调味品之外,几乎每一种食材,比如肉、菜、蛋等等,里面都含有钠离子和氯离子[1]。


为了避免爸妈后面一输了就狡辩说是没算上这些盐导致的,我们后面的计算就直接通过算总钠摄入量来反推氯化钠摄入量,这样能保证任何能算做「盐」的东西全都被算作盐。


让他们输个心服口服!


  • 「我」是什么?


为了简化问题的讨论,我们这里直接定义:这个问题下面,「我」就是我们的群众演员老张的 6 岁鹅几,中国好少年小张。



  • 「吃的米」是什么?


通常意义下,「米」指的是精白米。但是这里我们有一个问题:北方的小孩们吃米比较少,吃面比较多。如果只算米,北方的孩子们不是亏死?再比如,如果只算米面,那人家主吃高粱的家里咋整?主吃小米的又咋整?


不过,仔细想想得话,俗语里面用了米,很可能是因为发明这条俗语的那位家长是个生活在南方吃米区的人。如果这条俗语是北方家长发明的,那么他为了实现同样的反差,很可能就会说「我吃的盐比你吃的面还多」。同理,如果他家主食是小米,他肯定也会说「我吃的盐比你吃的小米还多」。


所以,在这个问题下,我把「吃的米」定义成:吃谷类食物[1]的重量,也就是包含大米、小米、大麦、小麦、玉米等等一切粮谷类和用它们制作成的米饭、面条、米粉之类的加工品。这样一来,结论就能对南方北方都适用了!



动手开算!



  • 老张活到三十岁,吃了多少盐


即便是开脑洞,我们也得遵守基本法,应该给予我们两位自愿参与研究的被试以目前学术界研究得到的最理想最健康的对待。


在真空中的球形鸡式的理想情况下,为了坚定响应中华人民共和国卫生健康委员会的号召,积极参与「健康中国行动」,我们应该让老张的钠摄入(也就是我们要拿来反推氯化钠/食盐摄入量的那个指标),一毫克不差地严格遵守 2013 版《中国居民膳食营养素参考摄入量》[2]当中对每日(平均)钠摄入的建议量要求。


(鉴于我收到了大量没看完文章的观众的评论,说健康饮食吃盐太少的,我在这里预告一下:请一定拉到底,你们想要的结果在彩蛋分析里~)


2013 版《中国居民膳食营养素参考摄入量》中对每日钠摄入的要求


于是,根据此表,我们使用编程语言 R,建立一个钠摄入计算的参考数据表:


#salt intake data

sodium.intake=  c(170,350,700,900,1200,1400,1600,1500,1400,1400,1300)

age.low.Na=     c(0,  0.5,1,  4,  7,   11,  14,  18,  50,  65,  80)

age.high.Na=c(age.low.Na[-1],NA)

salt.intake=sodium.intake*(23+35.5)/23/1000

Na.trait=data.frame(cbind(age.low.Na,age.high.Na,salt.intake,sodium.intake))


运行以上代码,可以得到这样一张包含了各年龄段该吃多少盐的数据表:



根据这个数据表,我们可以写一个函数计算老张截至任意年纪时的总钠摄入量:


#function:generic aggregated food intake calculation


calc=function(obs.age,food.trait){

  total.intake=numeric(length = length(obs.age))

  age=numeric(length = length(obs.age))

  age=obs.age


  #calculate fixed aggregated result for each age strata

  food.trait$strata.intake=rep(0,nrow(food.trait))

  for (i in 1:nrow(food.trait)) {

    food.trait$strata.intake[i]=(food.trait[i,2]-food.trait[i,1])*food.trait[i,3]*365.25

  }

  

  #calculate total intake

  for (i in 1:nrow(food.trait)) {

    total.intake[age>=food.trait[i,1] & age<food.trait[i,2]]=sum(food.trait$strata.intake[1:(i-1)])+(age[age>=food.trait[i,1] & age<food.trait[i,2]]-food.trait[i,1])*food.trait[i,3]*365.25

  }

  return(total.intake)

}


了解 R 编程的各位一定注意到了,本来这个过程是一个小学算术就能搞定的事,但这个函数写得非常通用(也因此看起来复杂了很多),可以基于任意参考值表计算出任意年龄下的任意食物摄入量。


这么写,是希望后面算小张的米的时候能够再次调用,以及……一个彩蛋分析。(哼我就是不在这说是啥!这么想知道的话就直接拉到最后!)


那么现在,我们通过告诉 R 老张有 30 岁,并且调用算盐的参考值表,来用刚刚写好的函数计算老张吃了多少盐。


calc(30,Na.trait)


R 的运行结果如下:



所以,老张活了 30 岁到现在,如果一直听从党和国家的号召,坚持健康饮食,那么这三十年来他理论上一共吃了 35729.55 g 食盐。


  • 解决了老张的盐,我们再来看小张的米。


对于小张吃了多少米这个问题,相似地,在真空中的球形鸡式的理想状况下,为了响应中华人民共和国卫生健康委员会的「健康中国行动」,我们也应该严格按照中国营养学会的《中国居民膳食指南》[3]当中的相关要求,给我们生在新中国长在红旗下的中国好少先队员小张同学以最健康的饮食安排。


由于 0 到 6 个月的婴儿应当坚持母乳喂养,因此严格遵守膳食指南的小张 0 到 6 个月期间没有吃过米。


7 到 24 个月的婴幼儿,根据中国营养学会的 7-24 月龄膳食宝塔,每天应该摄入 20-75g 的谷类。


  

其实照理说,这个时候的婴儿还只能吃碾碎的米糊,但是米碾成糊也是米!所以还是算作小张吃米了!


那么,由于婴儿添加辅食是一个逐步过渡的过程,不能一来就给他怼上 75g,所以我们假设小张整个 7-24 月龄阶段平均下来谷类食用量线性增长,每天吃 20g 谷类和 75g 谷类的中间值,47.5g 谷类。


而 2 岁以上的小张,就可以开始适用中国营养学会的《中国居民膳食指南》[3]中谷类部分的推荐量了:



同样地,对这张表里面的摄入范围,我们都假设小张老师吃的是取平均的中间值。那么,我们可以把前面的这些摄入参考量用这样的代码写进 R:


#rice intake data

crop.intake=c(0,(20+75)/2,(50+100)/2,(85+100)/2,(100+150)/2,(150+200)/2,(225+250)/2,(250+300)/2,(200+300)/2,(200+250)/2)

age.low.crop=c(0,0.5,1,2,4,7,11,14,18,65)

age.high.crop=c(age.low.crop[-1],NA)

rice.intake=crop.intake

rice.trait=data.frame(cbind(age.low.crop,age.high.crop,rice.intake,crop.intake))


运行上述代码,可以得到这样一张包含各年龄阶段该吃多少米的参考数值表:



接下来,我们要像算老张的盐那样,用这张表的信息算小张到今天满六岁为止一共吃了多少谷类。


我们直接调用前面写好的函数,将「小张的岁数是 6 岁」和「他吃的是米」这两个信息告诉我刚刚写的那个复合的函数:


calc(6,rice.trait)


R 的运行结果如下:



于是我们知道了,截至小张 6 岁生日那天,小张吃了 194952.2g谷类。


将近 400 斤!!!


老张可怜兮兮的七十来斤盐摄入量,在这庞大的优势面前,根,本,不,堪,一,击。


于是我们可以得到结论了:如果老张在他 30 岁那年的时候告诉 6 岁的小张说「我吃的盐比你吃过的米要多」,那么他是在胡说。


以上。



哈哈哈哈哈哈怎么可能才到这就以上了呢!



从小到大,我们都反复地被数学老师教育,不要一天到晚为了几个特殊值算出来的数字沾沾自喜,我们要的是通解!


说到通解,有没有想起来我前面写的那个函数?


是的,我之所以把它写成了面向向量的函数,就是因为要允许R用它作一个区间内的连续的函数图像呀!


啊哈哈哈哈哈哈,噫嘻嘻嘻嘻嘻嘻嘻,噢嚯嚯嚯活活活活~~~~



让我们用这些咒语(划掉)命令R里面把父子俩的盐摄入量和谷类摄入量画个图出来……


curve(calc(son.age.trans,rice.trait),xname = "son.age.trans",from=0,to=6,xlab = "son's age (father's age minus 24)",ylab = "aggregated intake",lty="solid",col="#0084ff",lwd=2)

curve(calc(dad.age+24,Na.trait),xname = "dad.age",from=0,to=6,add = T,lty="solid",lwd=2,col="#8590a6")

legend("topleft", legend = c("father's salt intake", "son's rice intake"),col = c("#8590a6", "#0084ff"), lty = 1:1, cex = 0.8)


R 收到命令之后,画出了这样的一张图:



在这张图里,蓝线是小张的谷类摄入总量,灰线是老张的盐摄入总量。横轴是小张的年龄,同时也是老张的年龄减去 24 的数值。


因此,这张图体现的是:自小张降生以来,老张小张父子俩吃盐和吃谷类的龟兔赛跑的实时战况!


可以看到,虽然老张在 24 岁迎接小张的时候积累了高达两万七的先发优势……



但由于小张吃谷类的速度是如此的快……


他那点先发优势,在小张还没长到两岁的时候,就已经被追平了。



而且,由于小张每天吃谷类的速度远快于老张吃盐的速度,2 岁一过,老张吃的这点盐的量,就被小张的谷类甩得尾灯都看不见了。



儿子不到两岁就不能用这招了,这是啥概念?这意味着,在你儿子能听懂你这句话啥意思之前,你就已经不能这么说了!


但是,家长代表老张仍然向我表示了他的不服。


「你安排我 24 岁就生小张,这也太早了点吧!要是我 42 岁老来得子,多积累十八年优势,怎么也能再在我儿子面前多装几年逼吧?」


嗯,既然你非要这么说的话,那就让我们按照你的要求再来比一次……


R 代码略作小修,管上:


curve(calc(son.age.trans,rice.trait),xname = "son.age.trans",from=0,to=6,xlab = "son's age (father's age minus 24)",ylab = "aggregated intake",lty="solid",col="#0084ff",lwd=2)

curve(calc(dad.age+42,Na.trait),xname = "dad.age",from=0,to=6,add = T,lty="solid",lwd=2,col="#8590a6")

legend("topleft", legend = c("father's salt intake", "son's rice intake"),col = c("#8590a6", "#0084ff"), lty = 1:1, cex = 0.8)


作图的结果是这样的:



理想是美好的,现实是残酷的。


老张辛辛苦苦忍着不生鹅几,一直忍到 42 岁,18 年啦!攒了整整五万多克的先发优势!!!



结果!也在鹅几两岁半的时候就消失了……



这意味着,老张晚生 18 年攒起来的五万克盐的优势,也只能让他在儿子小张面前多装不到一年大尾巴狼……


老张还是不服气:


「健康饮食」限制了我的吃盐能力!!我要吃到中国人目前的每天 10g 平均水平!!


须知,日均 10g 盐摄入(也就是大概 3900mg 钠摄入)的水平,已经算高的了。就目前而言,随便去翻本顶级医学杂志,那上面都会有一堆研究告诉你,吃这么多盐已经可能对健康有危害了[4]。


但是,既然老张想在儿子面前保持权威的心情急切,我们就违反一次受试者福利的要求,为他这么干一次吧。


我们再放弃要「健康饮食」这个假设,直接把老张的食盐量乘以 2.5,达到目前文献中报道的可能对健康有害的中国成年人人均 10g 盐水平:


Na.deadly.trait=data.frame(cbind(age.low.Na,age.high.Na,salt.intake))

Na.deadly.trait$salt.intake=Na.deadly.trait$salt.intake*2.7



在这种情况下,豁出命来也要装大尾巴狼的 42 岁的老张,可以在儿子面前说他吃的盐比他儿子吃的米更多,一直到……



……也只能一直说到儿砸上小学之前。


看到这个结果,老张还是不满意:


「现在的结果里面,我儿子吃什么杂七杂八的都算到谷类里边!要是只算吃的大米,我肯定能一直教育他到大学成年!!」


对于他这样的想法,我们也不说多了,就直接把小张吃的谷类砍一半算作大米食量吧:


rice.unfair.trait=data.frame(cbind(age.low.crop,age.high.crop,rice.intake))

rice.unfair.trait$rice.intake=rice.unfair.trait$rice.intake*0.5


在这样强大的作弊条件下,42 岁、不要命地每天齁死自己也要多吃盐的老张,只算儿子吃的大米,终于能再多说一段时间这句话……



……但,也只能一直说到鹅几八岁多的时候,也就是小学三年级的时候。


顺便,老张,再给你补一刀:


我搜了一下,Google 告诉我说地球上的长寿记录目前是 122 岁。



虽然你基本不可能活到 122 岁,但我在这给你把挂开足了,让你以开挂吃盐的不健康生活方式强行活到 122 岁,这个时候你一共吃的盐的重量是:414022.4g。


为了给老张开挂,我甚至发现了我原先把参考值表里面的寿命上限写成 NA 是有 bug 的,我改成了手填了个 150 作为上限才搞定……


而,你鹅几如果有一半谷物是吃米,那么只需要长到 10 岁,他吃的米的重量就能达到 432364.7g,超过你老张开挂苦苦支撑活了一百二十二年每天齁死自己吃的盐了:



所以,综上所述:


各位小朋友们,只要你小学一毕业,长到了可以跟你爸妈吵架的年纪了!


那么不要怀疑!你爸妈吃过的盐肯定没你吃过的米多了!


把这篇回答拍他们脸上吧!


你们的姐姐我,现在也不可能回头去跟爹妈吵架了,只能写个答案帮你们到这了……


很多观众朋友都在呼吁用粒数再算一遍。


作为一个研究营养流行病学的硕士生,我的学术训练告诉我,学术意义上,好的做法应该是自己称一堆米和盐,然后数粒数除下来得到单粒重量。


但是!因为我的厨房秤没电了(辣鸡德国制造!!待机时长还不如我在中国用的 made in China 款),而且这也只是个知乎答案而不是写论文,所以我决定:


  • 盐粒重量通过密度、长宽高等数据理论推算;


  • 米粒重量直接引用之前知乎上另一个回答中评论区网友声称自己称过得到的数据。


Google 告诉我,盐的密度是 2.16g/cm³。按照典型的盐粒大概 0.5mm³ 见方的尺寸,一粒盐的重量大约是 0.00027g。



而根据知友 @宽始 的手动测量,100 粒米是 2.1g,于是 1 粒米就是 0.021g。



于是,我们把两个系数除下去,用最开始不作弊的 24 岁老张 + 健康饮食的假设写 R 代码如下:


curve(calc(son.age.trans,rice.trait)/0.021,xname = "son.age.trans",from=0,to=2,add=T,xlab = "son's age (father's age minus 24)",ylab = "granules",lty="solid",col="#0084ff",lwd=2)

curve(calc(dad.age+24,Na.trait)/wt.salt.granule,xname = "dad.age",from=0,to=2,add = F,xlab = "son's age (father's age minus 24)",ylab = "granules",lty="solid",lwd=2,col="#8590a6")

legend("topleft", legend = c("father's salt granules", "son's rice granules"),col = c("#8590a6", "#0084ff"), lty = 1:1, cex = 0.8)


得到新的图:



为啥这图里没有代表小孩米摄入量的蓝线了呢?


因为它太矮了,比灰线的最小值还低了一个数量级,已经低得看不见了……


所以,论吃盐的颗粒数,老张的盐颗粒数确实一直高于小张的米颗粒数。


我仿佛已经听到了老张的欢呼声。



但且慢,我们小朋友阵营还没有输!!!



当 34 岁的老张跟 10 岁的鹅几小张说:「看见没,按照颗粒数,我这辈子吃过的盐都比你吃过的米还多」的时候,其实小张也可以说:「按照颗粒数的话,我活到十岁吃的盐也比你活了三十四年吃过的米还多啊!你这三十四年又是怎么活的??」


不是我瞎编,有 R 的函数图像作证。假设仍然不变,只是吃盐的换成小张,吃米的换成老张:


curve(calc(son.age,Na.deadly.trait)/wt.salt.granule,xname = "son.age",from=0,to=15,xlab = "son's age (father's age minus 24)",ylab = "granule num.",lty="solid",col="#0084ff",lwd=2)

curve(calc(dad.age+24,rice.unfair.trait)/0.021,xname = "dad.age",from=0,to=15,add = T,lty="solid",lwd=2,col="#8590a6")

legend("topleft", legend = c("father's rice granule", "son's salt granule"),col = c("#8590a6", "#0084ff"), lty = 1:1, cex = 0.8)



可以看到,小张的吃盐量在 8 岁左右的时候就超过了老张!


这张图告诉我们,按照老张的「我吃的盐比你吃的米颗粒多,我就比你牛逼」的理论,这证明小张从 8 岁之后就比老张牛逼了!


所以,对更新的总结:靠「盐」和「米」的比较,就算是算颗粒数,老张还是说不过小张!



小朋友胜利!!!!!!!!!



参考:


1. ^ab杨月欣. 中国食物成分表 [M]. 北京; 北京大学医学出版社. 2009.


2. ^中国营养学会. 中国居民膳食营养素参考摄入量速查手册 [M]. 北京; 中国标准出版社. 2013.


3. ^ab中国营养学会. 中国居民膳食指南(2016) [M]. 北京; 人民卫生出版社. 2016.


4. ^Mente A, O'Donnell M, Rangarajan S, et al. Associations of urinary sodium excretion with cardiovascular events in individuals with and without hypertension: a pooled analysis of data from four studies[J]. The Lancet, 2016, 388(10043): 465-475.


戳「阅读原文」查看剩下的 32 个回答




章莹颖案被告人被判终身监禁,不得假释

7 月 18 日,京都动画第一工作室突发火灾

为什么人被利器插入身体后会无力反击?

为什么汉字印在衣服上,会让人感觉很土?

临床上的镇静催眠药,黑市上的「迷魂药」?


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存