如何利用 R 的特性垂直/按列遍历基本 R 列表

问题描述 投票:0回答:1

我是 R 新手,对于家庭作业,我们必须从列表中提取每列的第一个元素来总结这些元素。我当前的代码似乎工作正常,但感觉我没有使用固有的 R 特性来有效地处理列表。 (相反,感觉就像我只是应用方法来处理我在 Java 中学到的列表) 我有一个清单:

mylist <- list(points_ex1=c(15,18,12), points_ex2=c(9,16,8), points_ex3=c(83,95,39))
我试图分别总结每个向量的第一/第二/第三值。对于第一列,这将导致 15+9+83=107

目前我正在使用两个嵌套的 for 循环来遍历列表,然后将每个元素附加到一个临时向量,然后将其总和附加到总点数的向量。

total_points <- NULL #object to append total scores to
for (i in 1:3){
  temp <- NULL #object to append points to
  for (j in 1:3){
    temp <- append(temp, mylist[[j]][i]) #appending the i-th element of each test score vector, before appending that sum
                                         #to the total_points vector and continuing with the next column
  }
  total_points <- append(total_points, sum(temp))
}

这按预期工作,但感觉它没有使用任何有用的 R 特性(例如像

sapply()
这样的函数)。有什么好的选择来改进这段代码吗?

由于这是我的第一个问题,请告诉我我是否违反了本网站上的任何约定/网络规则!谢谢。

r list
1个回答
0
投票

当列表项都具有相同的长度时,将它们作为数据框通常更容易。我愿意做

mylist |>
  as.data.frame() |>
  rowSums()
# [1] 107 129  59

如果您不想依赖可转换为数据框的列表,而是想提取每个项目的第

i
元素并对它们求和,那么我会这样做:

i = 1
sapply(mylist, "[", i) |>  ## extract `i`th element 
  sum()                    ## and sum
# [1] 107

然后您可以针对您想要的

i
值重复此操作。

© www.soinside.com 2019 - 2024. All rights reserved.