2016-01-25 33 views
-1

如何在不使用max()的情況下使用for循環找到R向量中的最大值?在不使用max()的情況下使用for循環找到R向量中的最大值()

這裏是我的解決方案:

a=c(-9,20,40,1,5,0) 
y=-Inf 
z=0 

for (i in a) { 
x=i 
if(x>y){y=i} 
else{y=Inf} 
if(y!=-Inf & z<y){z=i} 
} 
print(paste0("maximum number is:" , z)) 

有沒有一種簡單的方法來做到這一點?

+0

爲什麼沒有'MAX() '?有什麼具體的,你試圖實現?甚至沒有'which.max()'? –

+0

嗯,它的一個任務,具體說不使用任何函數,直接找到最大值。 –

+2

我剛剛刪除了我的回覆。你不應該發佈任務問題。您將錯過學習體驗的好處。嘗試思考你目前正在做什麼,看看你是否可以自己想出一個更簡單的解決方案。 – JPC

回答

1

OP的問題是「這可以做一個更簡單的方式」,而不是「爲我做」,所以答案是肯定的,它可以以一種更簡單的方式完成,而沒有形成樂趣:)

步驟1

開始通過寫一個新的版本,而不使用x變量(使用i直接)

步驟2

重新命名變量的事情,有意義! 當您開始編寫代碼時,請使用長名稱變量。

不要叫他們ixy,等...

稱他們爲current_valuemaximum_value_seencurrent_index,...

步驟3

,你寫的第二if(),僅在第一個if()TRUE

時執行所以你可以r從這個ewrite代碼:

# if1 
if(x>y){y=i} 
else{y=Inf} 

# if2 
if(y!=Inf){z=i} 

對此

# if1 
if(x>y){ 
    y=i 
    # if2 
    if(y!=Inf){z=i} 
} 
else{y=Inf} 

步驟4

第二個if(#if2)現在沒有用了! 刪除它

步驟5

y變量也是沒用的,你現在可以將其刪除。

步驟6

享受你們的辛勤工作,用新的4-5線最大功能並搶啤酒(你畢竟是學生!)

+0

非常感謝提示。我發現第二個如果可以被集成到第一個,那麼它將不會每次都運行。我很久以前纔開始介紹CS,現在又回來了BioStatistics。 –

+0

啊,我的壞,應該是:else {y = -Inf} –

+0

你確定嗎?重命名你的變量來停止在頭腦中混合'x','y'等,並保持當前的最大值 – Eloims

相關問題