R中的逻辑向量子集

R中的逻辑向量子集,r,vector,logic,subset,R,Vector,Logic,Subset,我在R中写一个函数,我陷入了一个向量子集 假设我有以下向量: ratio<-c(0,0,0,0,1.3,1.4) 但它是有效的: subset2 [1] 1.3 1.4 0.0 但是,此解决方案不适用于没有0的向量,例如: ratio2<-c(3,4,2,3,4) 我得到一个空向量作为 subset2 你知道我可以在哪里改进代码吗 非常感谢你的帮助 试试这个。。它没有子集 #if ratio's value between 0 to +Inf mysubset = c(r

我在R中写一个函数,我陷入了一个向量子集

假设我有以下向量:

  ratio<-c(0,0,0,0,1.3,1.4)
但它是有效的:

subset2
[1] 1.3 1.4 0.0
但是,此解决方案不适用于没有0的向量,例如:

ratio2<-c(3,4,2,3,4)
我得到一个空向量作为

subset2
你知道我可以在哪里改进代码吗


非常感谢你的帮助

试试这个。。它没有子集

#if ratio's value between 0 to +Inf
mysubset = c(ratio[ratio>0],unique(ratio[ratio==0]))

#if ratio's value between -Inf to +Inf and you want to remove only zero like you mentioned in question 
mysubset = c(ratio[ratio!=0],unique(ratio[ratio==0]))

试试这个。。它没有子集

#if ratio's value between 0 to +Inf
mysubset = c(ratio[ratio>0],unique(ratio[ratio==0]))

#if ratio's value between -Inf to +Inf and you want to remove only zero like you mentioned in question 
mysubset = c(ratio[ratio!=0],unique(ratio[ratio==0]))

这样构造代码与您用英语描述的算法非常相似:

filtered.ratio <- ratio[ratio > 0]
if (any(ratio == 0)) {
  filtered.ratio <- c(filtered.ratio, 0)
}
filtered.0]
如果(有(比率=0)){

filtered.ratio这样构造代码与您用英语描述的算法非常相似:

filtered.ratio <- ratio[ratio > 0]
if (any(ratio == 0)) {
  filtered.ratio <- c(filtered.ratio, 0)
}
filtered.0]
如果(有(比率=0)){

filtered.ratioR中的
if
命令未矢量化,因此
if(ratio==0)
仅将第一个元素与零进行比较,因此如果向量中的第一个零较晚,则不起作用。请尝试:

subset1 <- ratio[ratio>0]
if(any(ratio==0)) subset2 <- c(0,subset1) else subset2 <- subset
subset1 0]

if(any(ratio==0))subset2R中的
if
命令未矢量化,因此
if(ratio==0)
仅将第一个元素与零进行比较,因此如果向量中的第一个零较晚,则不起作用。请尝试:

subset1 <- ratio[ratio>0]
if(any(ratio==0)) subset2 <- c(0,subset1) else subset2 <- subset
subset1 0]

如果(any(ratio==0))subset2如果
0
是唯一可以多次出现的值,那么
unique(ratio[ratio>=0])
就可以了。非常感谢您的回答。不幸的是,情况并非如此如果
0
是唯一可以多次出现的值,那么
unique(ratio[ratio>=0]))
会成功的。非常感谢你的回答。不幸的是,情况并非如此。这太棒了!非常感谢!只是为了让我理解,诀窍是使用
unique
,对吗?功能屏幕只显示一次同一类的重复元素、报告和对象。对吗?只要向量具有正e值和零就行了。如果你想要它为负值,只需将第一个条件从ratio>0改为ratio!=0这太棒了!非常感谢!只是为了让我明白,诀窍是使用
unique
,对吗?同一类的重复元素和报告及对象的功能屏幕只显示一次。对吗?只要你向量有正值和零,它会起作用。如果你想让它为负值,只需将第一个条件从ratio>0改为ratio!=0非常感谢你,这项工作做得非常好!基本上,在使用
any
时,你在寻找逻辑条件,尽管所有向量都是真的。如果条件为真,那么
0
subset1
都是p打印。如果不是真的,对吗?是的,没错,
any
只是压缩了一整堆
语句,即
ratio[1]==0或ratio[2]==0或…
非常感谢您,这项工作做得非常好!基本上在使用
any
时,您通过所有向量查找逻辑条件。如果条件为真,则打印
0
subset1
。如果不是真的
subset2=subset1
。是吗?是的,是的,
any
只要压缩即可删除全部
语句,即
比率[1]==0或比率[2]==0或…
谢谢你的回答!我不太明白你关于
append
的意思。你能简单地解释一下吗,或者给我链接一些好的例子吗?再次非常感谢!谢谢你的回答!我不太明白你关于
append
的意思。你能简单地解释一下吗,或者链接me一些好例子?再次非常感谢!
filtered.ratio <- ratio[ratio > 0]
if (any(ratio == 0)) {
  filtered.ratio <- c(filtered.ratio, 0)
}
subset1 <- ratio[ratio>0]
if(any(ratio==0)) subset2 <- c(0,subset1) else subset2 <- subset