列表操作

huangapple go评论149阅读模式
英文:

List Opearation

问题

我正在尝试对列表中的项目执行循环操作,虽然看起来很简单,但由于无法检测到的错误,我没有得到预期的解决方案。代码如下:

  1. multinoms <- list() ###用于存储计算的多项式密度的空列表
  2. for (l in 1:length(sampled_geno)){
  3. for (i in 1:length(sampled_geno[1])){
  4. b <- as.data.frame(table(sampled_geno[i]))
  5. multinoms[l] <- dmultinom(x=c(b$Freq[1], b$Freq[2], b$Freq[3]), prob= c(b$Freq[1]/sum(b$Freq),b$Freq[2]/sum(b$Freq),b$Freq[3]/sum(b$Freq)))
  6. }
  7. }

Sampled_geno是一个长度为5的列表。使用我的代码,我只得到一个计算出的密度,重复了5次,尽管列表的值是不同的,如下所示:

  1. > sampled_geno
  2. [[1]]
  3. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  4. [47] 2 2 1 2 0 2 1 1 1 0 1 1 1 2 0 0 0 0 1 1 1 0 0 0 1 2 0 2 0 0 0 0 0 1 1 1 0 2 1 0 1 0 1 1 0 1
  5. [93] 0 2 1 1 1 0
  6. [[2]]
  7. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  8. [47] 2 2 1 2 0 2 1 1 1 0 0 1 2 0 1 1 1 0 0 1 1 0 0 2 0 1 1 1 1 1 0 0 1 1 0 1 2 0 1 0 1 0 2 1 1 1
  9. [93] 0 0 0 1 0 0
  10. [[3]]
  11. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  12. [47] 2 2 1 2 0 2 1 1 1 0 2 0 1 1 1 1 0 1 0 1 2 0 0 1 0 1 0 2 1 2 1 1 1 1 0 1 0 1 2 1 1 2 1 1 1 1
  13. [93] 1 0 0 0 1 1
  14. [[4]]
  15. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  16. [47] 2 2 1 2 0 2 1 1 1 0 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 0 0 2 1 0 0 1 0 0 0 2 1 0 0 1 0 1 0 2 2 0
  17. [93] 0 0 1 0 0 1
  18. [[5]]
  19. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  20. [47] 2 2 1 2 0 2 1 1 1 0 1 0 2 1 1 0 2 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 2 1 1 0 2 0 1 0 2 2 0
  21. [93] 0 0 0 1 1 1

非常感谢任何帮助。

英文:

I am trying to perform a loop operation on the items of a list and while it seeems simple enough, I am not getting the expected solution due to a bug I can't detect. the code is:

  1. multinoms&lt;- list() ###Empty list for storing computed multinomial densities
  2. for (l in 1:length(sampled_geno)){
  3. for (i in 1:length(sampled_geno[1])){
  4. b &lt;- as.data.frame(table(sampled_geno[i]))
  5. multinoms[l] &lt;-dmultinom(x=c(b$Freq[1], b$Freq[2], b$Freq[3]), prob= c(b$Freq[1]/sum(b$Freq),b$Freq[2]/sum(b$Freq),b$Freq[3]/sum(b$Freq)))
  6. }
  7. }

Sampled_geno is a list of lenght 5. Using my code, I only get one computed density repeated 5 times although the list values are different as we see below.

  1. [[1]]
  2. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  3. [47] 2 2 1 2 0 2 1 1 1 0 1 1 1 2 0 0 0 0 1 1 1 0 0 0 1 2 0 2 0 0 0 0 0 1 1 1 0 2 1 0 1 0 1 1 0 1
  4. [93] 0 2 1 1 1 0
  5. [[2]]
  6. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  7. [47] 2 2 1 2 0 2 1 1 1 0 0 1 2 0 1 1 1 0 0 1 1 0 0 2 0 1 1 1 1 1 0 0 1 1 0 1 2 0 1 0 1 0 2 1 1 1
  8. [93] 0 0 0 1 0 0
  9. [[3]]
  10. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  11. [47] 2 2 1 2 0 2 1 1 1 0 2 0 1 1 1 1 0 1 0 1 2 0 0 1 0 1 0 2 1 2 1 1 1 1 0 1 0 1 2 1 1 2 1 1 1 1
  12. [93] 1 0 0 0 1 1
  13. [[4]]
  14. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  15. [47] 2 2 1 2 0 2 1 1 1 0 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 0 0 2 1 0 0 1 0 0 0 2 1 0 0 1 0 1 0 2 2 0
  16. [93] 0 0 1 0 0 1
  17. [[5]]
  18. [1] 1 0 2 0 1 1 0 1 1 1 2 2 1 1 0 0 2 0 1 1 0 0 1 1 1 2 1 0 0 0 2 0 1 0 0 1 1 1 0 0 0 2 1 1 1 1
  19. [47] 2 2 1 2 0 2 1 1 1 0 1 0 2 1 1 0 2 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 2 1 1 0 2 0 1 0 2 2 0
  20. [93] 0 0 0 1 1 1

Any help is really appreciated.

  1. sampled_geno &lt;- list(c(1, 0, 2, 0, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 0, 0, 2, 0, 1, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 2, 1, 1, 1, 1, 2, 2, 1, 2, 0, 2, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 2, 0, 2, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0), c(1, 0, 2, 0, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 0, 0, 2, 0, 1, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 2, 1, 1, 1, 1, 2, 2, 1, 2, 0, 2, 1, 1, 1, 0, 0, 1, 2, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 2, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 2, 0, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 0, 0), c(1, 0, 2, 0, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 0, 0, 2, 0, 1, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 2, 1, 1, 1, 1, 2, 2, 1, 2, 0, 2, 1, 1, 1, 0, 2, 0, 1, 1, 1, 1, 0, 1, 0, 1, 2, 0, 0, 1, 0, 1, 0, 2, 1, 2, 1, 1, 1, 1, 0, 1, 0, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1), c(1, 0, 2, 0, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 0, 0, 2, 0, 1, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 2, 1, 1, 1, 1, 2, 2, 1, 2, 0, 2, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 0, 0, 2, 1, 0, 0, 1, 0, 1, 0, 2, 2, 0, 0, 0, 1, 0, 0, 1), c(1, 0, 2, 0, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 0, 0, 2, 0, 1, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 2, 1, 1, 1, 1, 2, 2, 1, 2, 0, 2, 1, 1, 1, 0, 1, 0, 2, 1, 1, 0, 2, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 0, 2, 0, 1, 0, 2, 2, 0, 0, 0, 0, 1, 1, 1))

答案1

得分: 1

sampled_geno中,使用[[ ]]而不是[]来访问列表元素。

  1. for (l in 1:length(sampled_geno)){
  2. b <- as.data.frame(table(sampled_geno[[l]]))
  3. multinoms[[l]] <- dmultinom(x=c(b$Freq[1], b$Freq[2], b$Freq[3]), prob= c(b$Freq[1]/sum(b$Freq),b$Freq[2]/sum(b$Freq),b$Freq[3]/sum(b$Freq)))
  4. }
  1. [[1]]
  2. [1] 0.009551857
  3. [[2]]
  4. [1] 0.009774618
  5. [[3]]
  6. [1] 0.009624812
  7. [[4]]
  8. [1] 0.009718148
  9. [[5]]
  10. [1] 0.009416344
英文:

In sampled_geno use [[ ]] instead of [] to access the list element.

  1. for (l in 1:length(sampled_geno)){
  2. b &lt;- as.data.frame(table(sampled_geno[[l]]))
  3. multinoms[[l]] &lt;- dmultinom(x=c(b$Freq[1], b$Freq[2], b$Freq[3]), prob= c(b$Freq[1]/sum(b$Freq),b$Freq[2]/sum(b$Freq),b$Freq[3]/sum(b$Freq)))
  4. }
  1. [[1]]
  2. [1] 0.009551857
  3. [[2]]
  4. [1] 0.009774618
  5. [[3]]
  6. [1] 0.009624812
  7. [[4]]
  8. [1] 0.009718148
  9. [[5]]
  10. [1] 0.009416344

huangapple
  • 本文由 发表于 2023年8月9日 00:31:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/76861532.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定