使用循环R的下一个in时出错

使用循环R的下一个in时出错,r,for-loop,next,R,For Loop,Next,我在For循环中不断遇到此错误: 乐趣中的错误(X[[i]],…):休息/下一步没有循环,跳到顶层 autoAnal为了理解为什么next不起作用,我们必须分解您尝试的代码的两部分。要做到这一点,倒过来看看lappy是如何工作的更有意义。让我们从一个名为i的基本变量开始,并将其设置为数字1到10。一旦有了它,我们将使用lappy来查看函数如何处理输入向量 i <- 1:10 tmp <- lapply(i, as.character) 这将获取channel的第一个元素,并将其传递

我在For循环中不断遇到此错误:

乐趣中的错误(X[[i]],…):休息/下一步没有循环,跳到顶层


autoAnal为了理解为什么
next
不起作用,我们必须分解您尝试的代码的两部分。要做到这一点,倒过来看看
lappy
是如何工作的更有意义。让我们从一个名为
i
的基本变量开始,并将其设置为数字1到10。一旦有了它,我们将使用
lappy
来查看函数如何处理输入向量

i <- 1:10
tmp <- lapply(i, as.character)
这将获取
channel
的第一个元素,并将其传递到函数
autoAnal
。此时,代码从运行的
lappy
循环切换到单个函数调用。函数要做的第一件事是检查传递到函数中的元素是否为数字。如果不是,则使用
next
告诉R跳过该变量

但是,
next
仅在循环中工作,例如
while
for
。让我们回到
i
变量。假设我们想循环
i
并打印一条消息,如果数字是偶数,否则跳到下一个数字。我们可以这样做:

for (i in 1:10) {
  if (i %% 2 == 0) {
    print("i is even!")
  } else {
    next
  }
}
在本例中,使用
next
不会引发错误,因为它是在
for
循环中使用的。这就是为什么在我的评论中我提到没有
for
循环,至少在你认为存在的地方没有。我这样说的目的是要指出,是的,
lappy
是一个循环,但不是为了你想用
next
做什么

那么,如果我们尝试使用next和
if
语句呢

i <- 5
if (i %% 2 == 0) {
  print("i is even")
} else {
  next
}
通过使用
if/else
,我们告诉计算机仅对数值变量执行这些计算。否则,打印一条消息,说明我们正在跳过一个变量。在普通代码中,我建议将
else
语句一起删除<如果没有返回值,code>lappy
将自然返回
NULL
,函数将完全跳过第一个变量的所有代码,因为它不是数字。最后,您将得到一个只对数字数据进行操作的无错误函数


希望这有助于说明为什么
next
在当前上下文中不起作用。

代码中没有
for
循环。至少不是你认为的那样。用
return(NULL)
替换
next
,您就没事了。@brittenb您能解释一下为什么下一个函数不起作用吗?
test <- lapply(channnel, autoAnal)
for (i in 1:10) {
  if (i %% 2 == 0) {
    print("i is even!")
  } else {
    next
  }
}
i <- 5
if (i %% 2 == 0) {
  print("i is even")
} else {
  next
}
autoAnal <- function(x){  
  if(is.numeric(x)){  
    m <- median(x, na.rm = T)  
    a <- mean(x, na.rm = T)  
    s <- sd(x, na.rm = T)  
    q <- quantile(x, na.rm = T)  
    q3 <- q[4]  
    q1 <- q[2]  
    outhigh <- (1.5 * q3) + IQR(x, na.rm = T)  
    outlow <- (1.5 * q1) - IQR(x, na.rm = T)    
    data.table(Median = m, Average = a, StDev = s,   
    Outhigh = outhigh, Outlow = outlow)
  } else {
    print("Skipping this element")
  }
}