2017-10-17 42 views
-2

我想循環通過整數1:1000比較我創建函數的結果與R函數。具體來說,我有:如何停止從打印結果循環R

floor.log2 = function(n) { 
    x = 1 
    i = 0 
    while (x <= n) { 
    x = 2*x 
    i = i + 1 
    } 
    print(i-1) 
} 

而且我想用比較:

floor(log(n, base = 2)) 

我創建的每個比較循環結束了打印每個指標1:1000 - 什麼是比較結果的簡潔的方式在這些函數中1:1000沒有R打印索引?

+5

你可以通過刪除'print'聲明 – kdopen

+0

啓動@kdopen哇。我其實不確定我怎麼沒有接受。謝謝。 – mizichael

+0

然後你需要實際返回一些東西 – kdopen

回答

0

我會修改你寫的現有功能:

floor.log2 = function(n) { 
x = 1 
i = 0 
while (x <= n) { 
    x = 2*x 
    i = i + 1 
} 
return(i-1) 
} 

測試:

iter <- 100 # How long you would like to test for 
vec1 <- c() # Container of your custom function 
vec2 <- c() # Container for the comparison function 

for(i in 1:iter) { 
    vec1[i] <- floor.log2(i) 
    vec2[i] <- floor(log(i, base = 2)) 
} 

最後:

all(vec1 == vec2) 
+0

你可以通過[vectorizing](https://stat.ethz.ch/R-manual/R-devel/library/base/html/Vectorize.html)'floor .log2'函數避免使用'for'循環:'floor.log2_V < - Vectorize(floor.log2,vectorize.args ='n')''。 – bouncyball

+0

感謝有關'Vectorize()'的信息。我沒有在野外遇到過這種情況。 – jacobsg