我试着在R中执行一个循环,我想我想做的很简单。我有一个向量(但我也在尝试数据框中的列),我在dpply中有一个函数,其中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将函数的每个结果存储在一个列表中,因此我创建了一个空的列表对象
usq<-list()
然后我使用循环
n = length(x)
for(i in n) {
usq[[i]] <-ddply(prova1, .(anno), summarize,
sum = sum(value >= x[i] ))
}
问题是R每次都会重写整个列表,因此,最终我得到了一个具有第一个值NULL
的列表,并且只有列表中的最后一个对象是正确的。
此外,我想在列或行上执行相同的循环,如下所示:
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
以便在列表中为每一列获取一个对象。有没有办法阻止R重写这个列表?如何在多个列上执行相同的循环?
提前谢谢你,卢卡
发布于 2020-05-11 18:19:24
以下是dplyr
和purrr
的一种选择
library(dplyr)
library(purrr)
map(x, ~ prova1 %>%
group_by(anno) %>%
summarise(Sum = sum(value >= .x)))
在OP的循环中,'n‘是一个单值,即'x’= 3的length
。
for(i in 3) # i.e. one time
相反,它应该是
for(i in 1:3)
即
for(i in seq_len(n))
使用预定义的长度初始化输出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] ))
}
https://stackoverflow.com/questions/61736467
复制