2014-01-29 21 views
2

大或變小,我有以下R代碼裏面:查找,如果值是下一個值被設定爲R

y <-round(runif(100, min=0, max=800)) 
for(i in y) { 
    if((i+1)>i) print("bigger") 
    if((i+1)<i) print("smaller") 
} 

我想知道,如果在列表中的下一個號碼是更大或更小。 它總是打印更大。我猜是因爲我做錯了。 任何幫助將是偉大的.. 謝謝

回答

3

您可以使用diff爲此。

yd <- diff(y) 
ifelse(yd > 0, print('bigger'), print('smaller')) 

for循環始終打印更大是因爲i總是比i+1少......看你問什麼原因你...你的意思是y[which(y==i) + 1] > i或東西...如果你必須使用一個循環,你可以做這樣的事情:

for (i in seq_along(y)) { 
    if (y[i+1] > y[i]) { 
    print('bigger') 
    } else { 
    print('smaller') 
    } 
} 

但是,使用diff矢量化版本會更有效,更容易在我看來理解。

+0

真棒。謝謝。這正是我一直在尋找的。我是否也可以附加到列表而不是打印?再次感謝! – digit

+0

只需將'ifelse'賦給一個向量並停止打印:'res < - ifelse(yd> 0,'big','small')'。 – Justin

+0

太棒了。這正是我想要的。再次感謝 !!! – digit

2

您可以創建下列方式的載體:

c("smaller", "bigger")[(diff(y) > 0) + 1] 
+0

也很好。非常感謝您的解決方案! – digit

相關問題