我是 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 row
}
total_points <- append(total_points, sum(temp))
}
这按预期工作,但感觉它没有使用任何有用的 R 特性(例如像 这样的函数sapply()
)。 有什么好的选择可以改进此代码吗?
这是我在这里的第一个问题,如果我违反了本网站的任何惯例/网络规则,请告诉我!谢谢。
当列表项的长度都相同时,通常更容易将它们作为数据框。我会这样做
如果您不想依赖于可转换为数据框的列表,而是想提取
i
每个项目的第个元素并对其进行求和,那么我会这样做:然后您可以重复此操作以获得
i
您想要的任何值。解决你的问题的一种方法:
在代码高尔夫的意义上,我想补充一下
有 n+1 个解决方案。对于数据操作,最好使用 data.frame/tibble。可能的方法:
但我们可以稍微重新排列一下列/行:
事实上,每一个能得到正确结果的解决方案都是正确的。这只是计算效率/代码可读性和可重复性的问题。
创建于 2024-11-05,使用reprex v2.1.0