首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lapply不起作用

lapply不起作用
EN

Stack Overflow用户
提问于 2017-02-23 01:44:32
回答 1查看 91关注 0票数 0

需要检查数据帧中的列,如果值连续为真(不连续为真),则替换它们。下面是一个例子。lapply不起作用,b列根本不变。

代码语言:javascript
复制
a<- c(1,2,3,4,5,1,1,1)
b<- c(TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE)
c<- data.frame(a,b)

index<- which(c$b == TRUE)
lapply(index,function(ind){
   c$b[ind + 1]<- ifelse(c$b[ind + 1]==TRUE,FALSE,FALSE)
})

有另一种方法可以做到这一点,而且效果不错。

代码语言:javascript
复制
trues <- which(c$b)
c$b[c$b == TRUE][c(0, trues[2:length(trues)] - trues[1:length(trues)-1]) == 1] <- FALSE

The correct result is:
> c
  a     b
1 1  TRUE
2 2 FALSE
3 3 FALSE
4 4 FALSE
5 5  TRUE
6 1 FALSE
7 1 FALSE
8 1  TRUE

仍然想知道为什么lapply不能工作!谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-02-23 01:52:56

lapply中的函数像R中的任何其他函数一样工作,并且具有事物的本地副本。在函数中所做的更改不会神奇地传播到调用者。

看看c在这方面是如何变化的:

代码语言:javascript
复制
lapply(index, function(ind){c$a[ind]=99;print(c)})

在每次函数调用结束时,它都会输出c,并且每次只更改一个值。因为下一次在lapply中,它是一个新函数,具有新的上下文。

如果你想改变lapply,你必须使用lapply的返回值,并对它做一些事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42398693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档