首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使R认为负位置搜索是越界的

使R认为负位置搜索是越界的
EN

Stack Overflow用户
提问于 2012-11-01 03:14:07
回答 2查看 162关注 0票数 1

vec<-c("a", "b", "c", "d")我的任务是从密钥字符串的左边和右边提取第二个元素。

如果我们的密钥字符串是"d",如果我们

代码语言:javascript
运行
复制
i<-c("d")
vec.1 <- append(vec.1, vec[which(vec == i) + 2])

我们得到NA。但如果我们这么做了

代码语言:javascript
运行
复制
i<-c("a")    
vec.1 <- append(vec.1, vec[which(vec == i) - 2])

我们得到"b","c","d“。是否可以将下标中的负值视为超出向量的位置,就像超过向量长度的正下标一样?这样,结果将是一个NA。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-01 03:32:17

代码语言:javascript
运行
复制
library(Hmisc)

Lag(vec,2)[vec=="d"]
#[1] "b"

Lag(vec,2)[vec=="a"]
#[1] ""

Lag(vec,-2)[vec=="a"]
#[1] "c"

Lag(vec,-2)[vec=="c"]
#[1] ""
票数 3
EN

Stack Overflow用户

发布于 2012-11-01 03:42:02

我相信我能做得更好,但这里已经很晚了。为什么不写一个小函数来做你想做的事情呢?

代码语言:javascript
运行
复制
myVec <- function(input, match, change) {
  temp = which(input == match)
  if ((temp + change) <= 0) {
    append(NA, input)
  } else {
    append(input, input[temp + change])
  }
}

vec <- c("a", "b", "c", "d")

myVec(vec, "a", -1)
# [1] NA  "a" "b" "c" "d"
myVec(vec, "c", -1)
# [1] "a" "b" "c" "d" "b"
myVec(vec, "c", -3)
# [1] NA  "a" "b" "c" "d"
myVec(vec, "d", 1)
# [1] "a" "b" "c" "d" NA
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13165973

复制
相关文章

相似问题

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