Function 为什么';这个对象不是在R中的'if'语句中赋值的吗?

Function 为什么';这个对象不是在R中的'if'语句中赋值的吗?,function,r,Function,R,我试图通过使用R解决这个问题来学习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 s ck ck(n) 3569> 但是,如果我试图将这些值赋给一个对象来求和,它将不起作用:

我试图通过使用R解决这个问题来学习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 s ck 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
>
>n s ck s
[1] 0
>
为什么第二个函数不起作用


多谢各位

全局/局部混乱。在
ck()中定义
s
,并返回它。差不多

   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
   }

ck全局/局部混淆。在
ck()中定义
s
,并返回它。差不多

   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
   }

ck另外,为了您自己的利益,请在函数中使用{},for和if语句!您可能还需要考虑<代码> %%<代码>函数,这是模函数:<代码> N%% 3 例如。@加文辛普森-谢谢您的建议,我想肯定有更好的方法来实现这一点!Gavin已经暗示了这个方向,但我将添加强制性的R矢量化注释:
n[n%%3==0 | n%%5==0]
。此外,为了您自己的利益,请在函数、for和if语句中使用{}!您可能还需要考虑<代码> %%<代码>函数,这是模函数:<代码> N%% 3 例如。@加文辛普森-谢谢您的建议,我想肯定有更好的方法来实现这一点!Gavin已经暗示了这个方向,但我将添加强制性的R矢量化注释:
n[n%%3==0 | n%%5==0]
。也许我没有看到它,但在OP的示例中,
n
是一个矢量。。。什么是不正确的索引?哦,对了,更正了。即使如此,最好是明确地使用,比如说,
seq_-along()
。但是现在我们在讨论风格…也许我看不到,但是在OP的例子中,
n
是一个向量。。。什么是不正确的索引?哦,对了,更正了。即使如此,最好是明确地使用,比如说,
seq_-along()
。但现在我们讨论的是风格。。。