首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分向量引入更多带约束的向量

拆分向量引入更多带约束的向量
EN

Stack Overflow用户
提问于 2017-04-01 06:05:57
回答 1查看 44关注 0票数 0

我正在制定一个餐饮计划,我需要一些关于如何将每天的摄入量分成几餐的建议。

我有一个向量,每个元素代表一个人为了满足他/她每天蛋白质、碳水化合物、脂肪和fiber..etc的摄入量而应该吃的不同食物的#克。

该向量如下所示:

代码语言:javascript
复制
intake <-  Salmon                 Chicken                   Pesto                  Butter 
         162.573720               96.262731               48.415283                4.560707 
            Yoghurt                Couscous              Boiled Egg                   Apple 
         190.233090              518.741711              198.049714                0.000000 
            Avocado                Broccoli              Grapefruit Quark / Kesella Natural 
           0.000000              350.000000                0.000000              217.450103 
            Oatmeal 
          67.820707 

这有13个长度。我还有一个矩阵X,包含每种食物类型的所有营养事实,看起来像这样:

代码语言:javascript
复制
        Salmon Chicken   Pesto Butter Yoghurt Couscous Boiled Egg  Apple Avocado Broccoli Grapefruit
protein   0.18   0.231 0.12740  0.004  0.0342   0.0379     0.1225 0.0000  0.0194   0.0350      0.007
fat       0.12   0.010 0.53850  0.820  0.0300   0.0016     0.0973 0.0005  0.1960   0.0027      0.001
carbs     0.00   0.000 0.04080  0.005  0.0484   0.2182     0.0040 0.1058  0.0170   0.0312      0.070
fibre     0.00   0.000 0.00218  0.000  0.0000   0.0140     0.0000 0.0232  0.0475   0.0310      0.019
Greens    0.00   0.000 0.00000  0.000  0.0000   0.0000     0.0000 0.0000  1.0000   1.0000      0.000
        Quark / Kesella Natural Oatmeal
protein                   0.127   0.133
fat                       0.001   0.070
carbs                     0.036   0.576
fibre                     0.000   0.100
Greens                    0.000   0.000

最后,我有一个(0/1)向量,它表明食物来源是否被认为是“早餐”。“午餐”、“晚餐”和“小吃”也是如此。

我想把向量“摄入量”分成一日三餐。我的第一个想法是,简单地取intake*早餐的点积,得到所有被认为是早餐的食物,然后就把它们吃了。这种方法不会给出非常合理的答案,因为它可能会让位于早餐要吃的食物,而剩下的饭菜几乎没有剩下的食物。

假设一个人一天吃5顿饭;

我想将摄入量向量分成5个单独的向量,将被认为是早餐的食品放在新的早餐向量中。此外,我还希望能够调整每种食物在每个载体中的含量:例如

默认(早餐50%蛋白质或更低,10%脂肪或更高,40%碳水化合物或更低,晚间小吃70%蛋白质或更低,25%脂肪或更高,5%碳水化合物或更低)。

这样我就可以调整,让一个人早餐吃大量蛋白质,在锻炼之前吃大量碳水化合物。

EN

回答 1

Stack Overflow用户

发布于 2017-04-01 13:38:20

当你说50%的蛋白质时,我不确定你想让我们如何量化。相对于非蛋白质食物,你如何衡量营养蛋白质的价值? 50%或更少的蛋白质意味着鸡肉与西兰花的比例是多少?我对营养了解不多。

另外,我不得不重新输入你的所有数据,所以这里是给那些试图解决这个问题的人/当我在一些澄清之后回来的时候。在您的数据集上使用dput(),并在编辑中复制和粘贴输出,以使我们更容易使用您的工作。

代码语言:javascript
复制
Foods <- c("Salmon", "Chicken","Pesto","Butter","Yoghurt","Couscous","Boiled Egg","Apple","Avocado","Broccoli","Grapefruit","Quark / Kesella Natural","Oatmeal")

intake <- c(162.573720, 96.262731, 48.415283, 4.560707, 190.233090, 518.741711, 198.049714, 0.00000, 0.0000, 350.00000, 0.00000, 217.450103, 67.820707)
names(intake) <- Foods
intake

nutrition <- data.frame(protein = c(0.18, 0.231, 0.12740, 0.004, 0.0342, 0.0379, 0.1225, 0.0000, 0.0194, 0.0350, 0.007, 0.127, 0.133), fat = c(0.12, 0.010, 0.53850, 0.820, 0.0300, 0.0016, 0.0973, 0.0005, 0.1960, 0.0027, 0.001, 0.001, 0.070), carbs = c(0.00,0.000, 0.04080, 0.005, 0.0484, 0.2182, 0.0040, 0.1058, 0.0170, 0.0312, 0.070, 0.036, 0.576), fibre = c(0, 0, 0.0218, 0, 0, 0.0140, 0, 0.0232, 0.0475, 0.0310, 0.019, 0.0, 0.1), greens = c(0,0,0,0,0,0,0,0,1,1,0,0,0), row.names = Foods)
nutrition

# constraints
#Breakfast 
#protein*.5 # maximum
#fat*.1 # minimum
#carbs*.4 # maximum

#Evening Snack 
#protein*.7 # maximum
#fat*.25 # minimum
#carbs*.5 #maximum

Breakfast <- c(0,1,0,0,1,0,1,1,1,0,1,1,1)
Lunch <- c(1,1,1,1,0,1,0,0,0,1,1,1,1)
Dinner <- c(1,1,0,0,0,1,0,0,1,0,0,1,0)
meals <- cbind(Breakfast, Lunch, Dinner)

# even split amongst meals
apply(meals, 2, function(x) 
  intake[which(x == 1)] / rowSums(split(cbind(intake, nutrition, meals), x)$`1`[,colnames(meals)]))

现在,你说的最难的部分是如何根据营养/膳食食物的相对部分进行非均匀分割。克与服务的比例是多少,这样我们就能知道这个人摄入了多少蛋白质?似乎我们需要这样做才能让摄入量与营养信息一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43150364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档