Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用for循环编写一个函数来访问R中的列表元素?_R - Fatal编程技术网

如何使用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循环以增量方式扩展对象可能是最低效的方法。根据提出的问题:“我知道有很多更有效的方法可以做到这一点,但我希望从一个非常天真的角度来处理这个问题。”我想添加尽可能少的元素,同时也意识到效率的差异。