首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的哪个函数或应用函数

R中的哪个函数或应用函数
EN

Stack Overflow用户
提问于 2013-06-24 18:43:32
回答 3查看 546关注 0票数 0

我试图写一个函数:

给定向量vect[i] == 0的当前索引,如果是vect[i+1] > 0,它将返回TRUE。否则,返回FALSE

我知道如何用for循环写出它来遍历整个向量。但是,我对更有效的方法感兴趣,比如编写如下简单的函数,然后将其传递给which()apply()函数?

代码语言:javascript
运行
复制
ia <- function(x) {
    if(vect[i] == 0) {
        if(vect[i+1] > 0) {
            return TRUE
        } else {
            return FALSE
        }
    }
}

这不管用。如何使其工作,使我可以将上面的函数传递到哪个函数或任何更好的函数,您可以提出?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-24 18:51:10

试试像这样的东西

代码语言:javascript
运行
复制
ia <- function(x) c(x[-length(x)] == 0 & x[-1] > 0, FALSE)

x <- c(1, 3, 0, 3, 4, 5, 0, 0, -3, 4, 0, 1, 0, -3, 10)

ia(x)
 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[11]  TRUE FALSE FALSE FALSE


cbind(x, ia(x))
       x  
 [1,]  1 0
 [2,]  3 0
 [3,]  0 1
 [4,]  3 0
 [5,]  4 0
 [6,]  5 0
 [7,]  0 0
 [8,]  0 0
 [9,] -3 0
[10,]  4 0
[11,]  0 1
[12,]  1 0
[13,]  0 0
[14,] -3 0
[15,] 10 0

我们还可以使用which获取索引。

代码语言:javascript
运行
复制
which(ia(x))
[1]  3 11
票数 2
EN

Stack Overflow用户

发布于 2013-06-24 18:49:51

怎么样

代码语言:javascript
运行
复制
vect[which(vect==0) + 1] > 0
票数 2
EN

Stack Overflow用户

发布于 2013-06-24 18:58:05

以下是两种方法:

代码语言:javascript
运行
复制
k <- c(0,1,0,2,0,0,3,0)
result <- c(mapply(function(x,y) x == 0 & y > 0, head(k, -1), tail(k, -1)), FALSE)

代码语言:javascript
运行
复制
c(apply(embed(k,2), 1, function(row) row[1] > 0 & row[2] == 0), FALSE)

tail和带有-1参数的head分别返回第一个和最后一个元素之外的所有元素,您可以使用它来比较每个索引的值和后面的索引值。带参数的embed 2创建向量的两列矩阵,其中最后一列包含除最后一个元素之外的所有元素,第二列滞后于1。

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

https://stackoverflow.com/questions/17282716

复制
相关文章

相似问题

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