R-使用“R”;“下一步”;apply函数中的语句

R-使用“R”;“下一步”;apply函数中的语句,r,lapply,R,Lapply,看起来next语句(用于停止当前求值并转到for循环的下一次迭代)在apply函数中不起作用 示例:lappy(1:10,函数(x)如果(x==5){next}否则{print(x)}) 在apply?中对next进行任何方便的替换,这里有一个使用哈德利purr软件包的选项: library(purrr) 1:5 %>% map_if(~.x != 5, ~print(.x)) 对于像您这样的案例,简短的答案是return lapply(1:10, function(x) if (x =

看起来
next
语句(用于停止当前求值并转到for循环的下一次迭代)在
apply
函数中不起作用

示例:
lappy(1:10,函数(x)如果(x==5){next}否则{print(x)})


apply

中对
next
进行任何方便的替换,这里有一个使用哈德利purr软件包的选项:

library(purrr)
1:5 %>% map_if(~.x != 5, ~print(.x))

对于像您这样的案例,简短的答案是
return

lapply(1:10, function(x) if (x == 5) {return()} else {print(x)})

这是有意义的,因为您正在应用的代码是一个函数。显然,我假设您的实际情况更复杂,如果在使用
lappy
时,您只对函数中的一个元素进行操作,那么循环就没有任何意义。您的操作本质上是递归的,这不是
lappy
的目的。您需要一个
for
循环。您的简化示例相当于
(1:10->x)[x==5]
;也许你想尝试一个更接近你实际工作的例子,我们可能会提供更多有用的建议;e、 g.
如果(x==5)打印(x)
。或者将谓词从
lappy
移动到
Filter
,并将其结果传递到
lappy
lappy(Filter(function(x)x==5,1:10),function(x){{####做任何事})
。不幸的是,它不适用于我的特定用途(我的函数体实际上包含大量的数据处理,带有多个查询;但这是一个非常有趣的例子。这个包裹看起来很有前途!与Hadley的工作一样…这是正确的答案,在删除例如
do.call(rbind、lappy(list(…)、function(x)…)
中的列表对象时,它会更有用。