2017-10-05 166 views
0

我想创建一个散点图,该散点图的某些x和y值已标记为点,并且在这些值下面没有标记的点。根据阈值标记散点图

我在思考着什么样

plot(data[,2]~data[,3], ylim=rev(range(data[,2])), xlim=c(-20,20), log="y", type="n") 
text(data[,2]~data[,3], labels=ifelse(data[,2] < 0.05 && data[,3] > 1, data[,1], points(y,x))) 

,但它给了我这个错误:

Error in ans[!test & ok] <- rep(no, length.out = length(ans))[!test & : 
replacement has length zero 
In addition: Warning message: 
In rep(no, length.out = length(ans)) : 
'x' is NULL so the result will be NULL 

我在这里找到了一些类似的问题对SO,但没有什么能够适应我的需要 - 至少凭借我有限的知识。

(我是在为r的新手,所以请我的问题承担。)

+0

你应该使用一个'&',如果你想在两个向量之间使用逻辑AND' – wici

+0

@wici我改变了它,但错误仍然存​​在... – LinuxBlanket

回答

0

有此回答两个问题与

text(data[,2]~data[,3], labels=ifelse(data[,2] < 0.05 && data[,3] > 1, data[,1], points(y,x))) 

结帐: R - boolean operators && and || 了解&之间的差异& &,你的情况“&”会更有意义。 第二个问题是

points(y,x) 

的代码此部分称为当逻辑响应为“假”;即if条件的FALSE分支; 我猜是一个本地函数,需要参数x & y;但x和y没有在ifelse的parent.frame(范围)中实例化。所以当你修复“&”;你会得到一个围绕点(y,x)的错误。确保您需要执行的功能

data[,2] < 0.05 & data[,3] > 1 

为false将返回一个值。

+0

我纠正了&&错误,但它给了我同样的错误在 – LinuxBlanket

+0

text(data [,2]〜data [,3],labels = ifelse(data [,2] <0.05&data [,3]> 1,data [,1],data [,2]))之前,尝试一下,看看你是否有数据点。如果是这样的话;像我指出的那样(y,x)显然需要纠正。 – Yash