【发布时间】:2011-08-02 21:30:14
【问题描述】:
我正在尝试通过使用 R 解决这个 ProjectEuler 问题来学习 R。
如果我在函数中使用cat,我可以获得正确值的列表:
> 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
>
为什么第二个功能不起作用?
谢谢。
【问题讨论】:
-
另外,为了您自己,请在您的函数、for 和 if 语句中使用 { }!
-
您可能还想考虑
%%函数,它是模函数:例如en.wikipedia.org/wiki/Modulo_operatorn %% 3。 -
@Gavin Simpson - 感谢您的建议,我想一定有更好的方法来做到这一点!
-
@Gavin 已经暗示了这个方向,但我会添加强制性的 R 矢量化注释:
n[n %% 3 == 0 | n %% 5 == 0]。