我的基本R代码有错误?缺少需要TRUE/FALSE的值

我的基本R代码有错误?缺少需要TRUE/FALSE的值,r,R,基本上,我试图从R中的向量中删除一些元素,但我一直得到这样的错误:缺少需要TRUE/FALSE的值 代码如下: exA2b = function(x){ m=mean(x) s=sd(x) print(x) for(i in 1:length(x)) { if(x[i]<=m-2*s|x[i]>=m+2*s) { x=x[-i] } } print(x) } x=scan("test.txt") exA2b(x) 我想

基本上,我试图从R中的向量中删除一些元素,但我一直得到这样的错误:缺少需要TRUE/FALSE的值 代码如下:

exA2b = function(x){
  m=mean(x)
  s=sd(x)
  print(x)
  for(i in 1:length(x))
  {
    if(x[i]<=m-2*s|x[i]>=m+2*s)
    {
      x=x[-i]
    }
  }
  print(x)
}
x=scan("test.txt")
exA2b(x)

我想这是关于NA值的问题,但我无法理解它。不过,我通过在第一个if条件之前添加if(!is.NA(x[I])解决了这个问题! 如果有人面临同样的问题,下面是代码:

exA2b = function(x){
  m=mean(x)
  s=sd(x)
  print(x)
  for(i in 1:length(x))
  {
    if(!is.na(x[i])){
    if(x[i]<=m-2*s|x[i]>=m+2*s)
    {
      x=x[-i]
    }
  }}
  print(x)
}
x=scan("test.txt")
exA2b(x)
exA2b=函数(x){
m=平均值(x)
s=sd(x)
打印(x)
用于(1中的i:长度(x))
{
如果(!is.na(x[i])){
如果(x[i]=m+2*s)
{
x=x[-i]
}
}}
打印(x)
}
x=扫描(“test.txt”)
exA2b(x)

没关系,我通过在第一个if条件之前添加if(!is.na(x[I])解决了这个问题! 如果有人面临同样的问题,下面是代码:

exA2b = function(x){
  m=mean(x)
  s=sd(x)
  print(x)
  for(i in 1:length(x))
  {
    if(!is.na(x[i])){
    if(x[i]<=m-2*s|x[i]>=m+2*s)
    {
      x=x[-i]
    }
  }}
  print(x)
}
x=scan("test.txt")
exA2b(x)
exA2b=函数(x){
m=平均值(x)
s=sd(x)
打印(x)
用于(1中的i:长度(x))
{
如果(!is.na(x[i])){
如果(x[i]=m+2*s)
{
x=x[-i]
}
}}
打印(x)
}
x=扫描(“test.txt”)
exA2b(x)

这应该完成您正在尝试执行的操作:

exA2B <- function(x){
  m=mean(x)
  s=sd(x)
  print(x)
  x[ifelse(x<=m-2*s|x>=m+2*s, FALSE, TRUE )]
 }

exA2B这应该是您想要做的:

exA2B <- function(x){
  m=mean(x)
  s=sd(x)
  print(x)
  x[ifelse(x<=m-2*s|x>=m+2*s, FALSE, TRUE )]
 }

exA2B是的,这是因为
NA
s。问题是你在做一些
length(x)
次的事情,但是你正在删除
x
中的一些元素。假设你在这一过程中删除了3个元素;现在,在最后3次迭代中,您将有一个
NA

这将满足您的要求:

exA2b = function(x){
  y = x
  m=mean(x)
  s=sd(x)
  print(x)
  x = x[!(x<=m-2*s | x>=m+2*s)]
  print(x)
}
exA2b(x)
exA2b=函数(x){
y=x
m=平均值(x)
s=sd(x)
打印(x)
x=x[!(x=m+2*s)]
打印(x)
}
exA2b(x)

是的,这是因为
NA
s。问题是你在做一些
length(x)
次的事情,但是你正在删除
x
中的一些元素。假设你在这一过程中删除了3个元素;现在,在最后3次迭代中,您将有一个
NA

这将满足您的要求:

exA2b = function(x){
  y = x
  m=mean(x)
  s=sd(x)
  print(x)
  x = x[!(x<=m-2*s | x>=m+2*s)]
  print(x)
}
exA2b(x)
exA2b=函数(x){
y=x
m=平均值(x)
s=sd(x)
打印(x)
x=x[!(x=m+2*s)]
打印(x)
}
exA2b(x)

你是否有一个
向量
作为输入,我假设这是我从那个txt文件中读取后得到的,你是否有一个
向量
作为输入,我假设这是我从那个txt文件中读取后得到的,我理解。非常感谢。当然如果开始向函数中引入更大的数据集,ifelse()将比for循环运行得更快。我理解。非常感谢。当然如果开始向函数引入更大的数据集,那么ifelse()将比for循环运行得更快。