R - 如何在 nrow < N 时继续迭代

在一个岛上

我正在使用 TTR 包来计算大量数据帧的指数移动平均线。当我尝试下面的 for 循环时,如果我设置 n>1,我会得到一个评估错误。

options(digits = 3)
for(i in seq_along(list)){
    list[[i]] <- list[[i]] %>%
    mutate(exp.ma = EMA(x, n = 10))
}

mutate_impl(.data, dots) 中的错误:评估错误:n = 10 超出有效范围:[1, 7]。

当设置 n = 2 时:

mutate_impl(.data, dots) 中的错误:评估错误:n = 2 超出有效范围:[1, 1]。

有趣的是,如果我设置了代码,我可以成功运行代码,n = nrow(list[[i]])但是这会妨碍我指定任何其他n值的能力- 它是n = 1n = nrow(list)

这让我感到困惑,因为我在使用该rollmean函数运行相同的 for 循环时没有任何问题,无论周期数 (k) 是多少。此外,我在单个数据帧上运行相同的功能没有问题:

df <- df %>% mutate(exp.ma = EMA(x, n = 10))

在我看来,这个错误与成功/不成功地迭代i列表长度有关。我确信我的代码不是解决这个问题的最有效方法,所以任何指导都值得赞赏。

编辑:可重现的例子

library(TTR)
library(tidyverse)
library(plyr)

# reproducible example
set.seed(1363)
d1 <- data.frame(val1 = c(rnorm(n=3, mean=15)), val2 = c(rnorm(n=3, mean=15)))
d2 <- data.frame(val1 = c(rnorm(n=35, mean=12)), val2 = c(rnorm(n=35, mean=25)))

my.list <- list(df1 = d1, df2 = d2)

for (i in seq_along(my.list)) {
  my.list[[i]] <- my.list[[i]] %>%
   mutate(exp.ma = EMA(val2, n = 5))
}
> Error in EMA(val2, n = 5) : n = 5 is outside valid range: [1, 3]

我想出了导致错误的原因。列表中的第一个数据框 (d1) 有 3 行,因此设置 n=5 将产生n=5 is outside valid range: [1, 3]第一个线索应该是当我设置时 for 循环工作的事实n=nrow(list[[i]])

我现在的问题是如何设置 for 循环,使其在循环遍历数据帧时不会停止,nrows < n或者更好,它会根据数据帧中的行数计算第一个可用的 EMA 值。

尝试用数字或行数中最小的一个来替换数字,例如:

mutate(exp.ma = EMA(val2, n = min(c(5,length(val2)))))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R:如何在图例中写“≥2:n = nrow(x)”?

如何在R中按组返回nrow?

R grid.arrange:nrow * ncol> = n不是TRUE

如何从数据帧列表中删除nrow <n的数据帧?

如何在R中存储来自多个数据帧的nrow信息

r 中的 NROW 和 nrow 之间有什么区别?

错误:在插入符号中使用Train时,nrow(x)== n不是TRUE

在Caret中使用train时,“ nrow(x)== n不是TRUE”;已经设置为因素

R:如何匹配/合并2个不同维度的矩阵(nrow / ncol)?

在R中按nrow或ncol移位矩阵

R 1:nrow() 循环正常但返回 NULL

如何在php中读取文件时添加/ r / n

R错误处理 - 如何在出现警告时询问用户是否要继续

R中sum(),length(which())和nrow()之间的差异

nrow 只为 R 中的一行返回空值

R带nrow的样本选择基本问题

R if(nrow(emobj $ Mu)!= nclass || ncol(emobj $ Mu)!= p || nrow(emobj $ LTSigma)!=错误:缺少需要TRUE / FALSE的值

如何在R中的每个循环迭代结束时创建新变量

如何在使用 .rstrip() 删除 \r\n 时防止出现空格

在线程执行循环迭代时如何继续与master一起工作?

如何在继续时修改StepStepState

如何在异常时继续映射循环?

如何在 Rust 迭代 N 次后停止迭代器?

如何迭代 R 中的 1 <= i < j <= n 个元素?

如何在VIM中区分\ r \ n和\ n

如何在R中找到小于n的整数的n的GCD

循环时如何继续?

Scala如何在n> 0时减少

Python:当一个键有n个值时,如何在for循环中迭代dict的每个元素