如何使用for循环编写一个函数来访问R中的列表元素?
我正在尝试编写一个函数如何使用for循环编写一个函数来访问R中的列表元素?,r,R,我正在尝试编写一个函数for\u over\u list(n),该函数使用for语句对my\u list中的所有元素求和,使用R的两种列表访问方法中的每一种: 通过列表的元素进行访问 按列表的位置编号 为了通过位置号访问列表元素,我知道要使用双括号,即my_list[[2]] 为了解决这个问题,我想在遍历列表元素时,将sum()函数应用于列表的每个元素。这是我到目前为止所做的,但显然它不起作用。我知道有很多更有效的方法可以做到这一点,但我希望从一个非常天真的角度来处理这个问题 for_over_
for\u over\u list(n)
,该函数使用for
语句对my\u list
中的所有元素求和,使用R的两种列表访问方法中的每一种:
my_list[[2]]
为了解决这个问题,我想在遍历列表元素时,将sum()
函数应用于列表的每个元素。这是我到目前为止所做的,但显然它不起作用。我知道有很多更有效的方法可以做到这一点,但我希望从一个非常天真的角度来处理这个问题
for_over_list<- function(n=2) {
my_list <- list(c(1:n), rep(1,n))
sum_by_element <- 0
sum_by_position <- 0
# Code the for-loop that sums by element
for(elem in my_list){
sum_by_element <- sum(my_list[[elem]])
}
# Code the for-loop that sums by position number
for(pos in my_list){
sum_by_position <- sum(my_list[[pos]])
}
# Return the resulting sums as a named list
list(element=sum_by_element, position=sum_by_position)
}
对于_over _list我想这就是你想要的——使用每种方法,这会产生一个向量作为输出,其中向量中的每个元素是我的_list
中相应位置的元素之和。我把它们分开,让事情变得容易一点
在本例中,您正在迭代元素本身——您不必索引到列表中,因为您已经拥有了所需的内容
sum_by_element = c()
for(elem in my_list){
sum_by_element = c(sum_by_element, sum(elem))
}
在本例中,您将迭代元素的索引——这意味着您必须使用您提到的[
符号将元素索引到列表中
sum_by_position = c()
for(index in 1:length(my_list)){
sum_by_position = c(sum_by_position, sum(my_list[[index]])
}
这就是你想要的吗?好吧,我的评论没有得到认可,我将在这个由两部分组成的问题上发布使用for循环的推荐方法,假设所需的是单个的而不是全部的总和
for_sum_names <- function(L) {
res <- vector("numeric", length(L) )
for( i in names(L) ) {
res[i] <- sum( L[[i]] ) }
return(res)
)
for_sum_nums <- function(L) {
res <- vector("numeric", length(L) )
for( i in seq_along(L) ) {
res[i] <- sum( L[[i]] ) }
return(res)
)
对于_sum_名称,您能否提供一个最小的示例和所需的输出?也许您希望(在您的循环中)sum_by_元素=sum(c(sum_by_元素,我的_列表[[elem]]))
?照此,每次通过循环时,您都在写按元素求和
。这同样适用于按位置求和
。我认为您应该注意的第一件事是,两个循环的代码是相同的。变量名称不同,但您做的是相同的事情。(这可能不是你想做的事情,这是另一个问题。)有人会认为你不会使用c
,而是使用sum
和init在0。我相信这是对问题的不同理解——我理解这个问题是要求对列表中的每个元素求和,而不是对整个数据结构求和。这就是为什么列表由向量组成,而不是单个值s、 在这种情况下,建议预先分配一个正确长度的列表或数字向量,然后按名称或数字放置索引和。使用for循环以增量方式扩展对象可能是最低效的方法。根据提出的问题:“我知道有很多更有效的方法可以做到这一点,但我希望从一个非常天真的角度来处理这个问题。”我想添加尽可能少的元素,同时也意识到效率的差异。