2011-08-02 73 views
1

我試圖通過使用R.爲什麼不在R的這個`if`語句中分配這個對象?

如果我在函數中使用cat我能得到正確的值的列表中選擇此ProjectEuler問題努力學習R:

> n <- 1:9 
> s <- 0 
> ck <- function(n) 
+ for(i in n) 
+  if(i/3 == round(i/3) | i/5 == round(i/5)) cat(i) 
> ck(n) 
3569> 

,但如果我嘗試分配這些對他們總結它不起作用:

> n <- 1:9 
> s <- 0 
> ck <- function(n) 
+ for(i in n) 
+  if(i/3 == round(i/3) | i/5 == round(i/5)) s <- c(s, i) 
> ck(n) 
> s 
[1] 0 
> 

爲什麼不第二個函數的工作?

謝謝。

+4

另外,爲了您自己的利益,請在您的函數中使用{},for和if語句! –

+1

您可能還想考慮'%%'函數,它是* modulo *函數:例如,http://en.wikipedia.org/wiki/Modulo_operator'n %% 3'。 –

+0

@Gavin Simpson - 感謝你的建議,我認爲肯定有更好的方法來做到這一點! – KennyPeanuts

回答

6

全局/本地混淆。定義s內部ck(),並返回它。類似於

ck <- function(n) { 
    s <- 0 
    for(i in n) { 
     if(i/3 == round(i/3) | i/5 == round(i/5)) { 
     s <- c(s, i) 
     } 
    } 
    s 
    } 
+0

也許我沒有看到它,但'n'是OP的例子中的一個向量......什麼是不正確的索引? –

+0

哦,糾正錯誤。即使如此,最好是明確和使用,比如說'seq_along()'。但現在我們在辯論風格... –