【问题标题】:Storing function output in a list in R将函数输出存储在 R 的列表中
【发布时间】:2014-04-02 22:23:28
【问题描述】:

我有以下数据框

df <- data.frame(A = c(0,100,5), B = c(0,100,10), C = c(0,100,25)

我使用这个函数

for(i in c(1:3))) 
{seq(df [1,i], df [2,i], df [3,i])
}

我需要存储输出,但到目前为止我只能使用

打印结果
{y<-seq(df [1,i], df [2,i], df [3,i])
print(y)}

相反,我想将这些输出存储在一个列表中以获得类似的东西

[[1]]
[1]   0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95 100

[[2]]
[1]   0  10  20  30  40  50  60  70  80  90 100

[[3]]
[1]   0  25  50  30  100

【问题讨论】:

    标签: r list function seq


    【解决方案1】:

    使用lapply 代替for 循环

    > lapply(1:3, function(i) seq(df[1,i], df[2,i], df[3,i]))
    [[1]]
     [1]   0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95 100
    
    [[2]]
     [1]   0  10  20  30  40  50  60  70  80  90 100
    
    [[3]]
    [1]   0  25  50  75 100
    

    【讨论】:

      【解决方案2】:

      这里最好的解决方案是使用 lapply 作为@Jilber。

      如果您想知道如何附加列表:

      result = list()             
      for(i in c(1:3))
      {
        result[[i]]<- seq(df [1,i], df [2,i], df [3,i])
      }
      result
      

      【讨论】:

      • 我建议使用result &lt;- vector("list", 3) 以避免来自The R Inferno 的Circle 2
      【解决方案3】:

      lapply 是要走的路。这是另一种方法,它使用 data.frame 只是一个列表这一事实。

      lapply(df, function(x) do.call(seq,as.list(x)))
      # $A
      # [1]   0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95 100
      #
      # $B
      # [1]   0  10  20  30  40  50  60  70  80  90 100
      # 
      # $C
      # [1]   0  25  50  75 100
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 2021-06-25
        相关资源
        最近更新 更多