簡體   English   中英

ddply 上的 For 循環

[英]For Loop on ddply

我正在嘗試在 R 中使用 for 執行循環。 我想做的事情我認為很簡單。 我有一個向量(但我也在嘗試使用數據框中的一列)並且我在 dpply 中有一個 function ,其中 R 必須替換向量中的值:

x = c(1,3,4)

我的數據框 prova1 是:

   anno variable value
1   1922      gen   0.5
2   1922      gen   0.0
3   1922      gen   1.5
4   1922      gen   0.0
5   1922      gen   4.0
6   1922      gen   2.5
7   1922      gen   5.0
8   1922      gen   0.0
9   1922      gen   0.0
10  1922      gen   0.0
11  1922      gen   0.0
12  1922      gen   0.0
13  1922      gen   0.0
14  1922      gen   0.0
15  1922      gen   0.0
16  1922      gen   2.5
17  1922      gen   0.0
18  1922      gen   0.0

另外,我希望 r 將 function 的每個結果存儲在一個列表中,因此我創建了一個空列表 object

usq<-list()

然后我使用循環

  n = length(x)
   for(i in n) {
  usq[[i]] <-ddply(prova1, .(anno),  summarize,
                             sum = sum(value >= x[i] ))
}

問題是 R 每次都會覆蓋整個列表,因此,最后我獲得了第一個值NULL的列表,只有最后一個 object 是正確的。

此外,我想在列或行上執行相同的循環,例如:

   gen   feb   mar   apr   mag   giu   lug   ago   set   ott   nov   dic
  3.93   5.2   3.2     4     5     6     7     8     9    10    11    12

為了在每列的列表中獲得 object。 有沒有辦法阻止 R 覆蓋列表? 以及如何在多列上執行相同的循環?

提前謝謝你,盧卡

這是dplyrpurrr的一個選項

library(dplyr)
library(purrr)
map(x, ~ prova1 %>%
            group_by(anno) %>%
            summarise(Sum = sum(value >= .x)))

在 OP 的循環中,“n”是單個值,即“x”的length = 3。我們正在循環

for(i in 3) # i.e. one time

相反,它應該是

for(i in 1:3)

IE

for(i in seq_len(n))

最好用預定義的長度初始化 output list

library(plyr)
usq <- vector('list', length(x))
for(i in seq_len(n)) {
    usq[[i]] <- ddply(prova1, .(anno),  summarize,
                         sum = sum(value >= x[i] ))
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM