2016-03-10 64 views
1

我想用函数返回的项填充矢量。但我不能够执行fn (c(1,3,4,7,8,9))用于填充矢量的R函数

后,要做到这一点

w=NULL 
fn=function(x){ 

for (i in x){ if (i%%2==1){ w <- c(w, i) 
} print (w) 

} return (w) } 

我仍然得到

w NULL 

我所期待的是

w [1] 1 3 7 9 
+0

的功能产生错误 – SymbolixAU

+2

你不需要所有的循环等 - 'test < - c(1,3,4,7,8,9); fn < - function(x)x [x %% 2 == 1]; fn(test)' – thelatemail

回答

1

此作品为R代码,但这是你期望的吗?

w <- NULL 

fn <- function(x){ 

    for(i in x){ 

     if(i%%2==1){ 
      w <- c(w, i) 
     } 
     print (w) 
    } 
return (w) 
} 

x <- c(1,3,4,7,8,9) 
fn(x) 
# [1] 1 
# [1] 1 3 
# [1] 1 3 
# [1] 1 3 7 
# [1] 1 3 7 
# [1] 1 3 7 9 
# [1] 1 3 7 9 

你其实只是想

x[x%%2==1] 
# [1] 1 3 7 9 
1

通常要使用w你的功能比你在R对话使用的一个(不同尽管两者被称为相同)。这就是为什么你的函数在执行后不会改变你的R会话中的w,并且它保持为NULL。

如果你真的想改变在函数中R对话的w的价值,你可以使用赋值<<-

w = NULL 
fn = function (x) { 
    for (i in x) { 
     if (i %% 2 == 1) { 
      w <<- c (w, i) ## here is the change 
     } 
     print (w) 
    } 
    return (w) # and this is not strictly needed 
} 

fn (c(1,3,4,7,8,9)) 

w 

[1] 1个3 7 9

+0

我不认为你的理由是**为什么**'w'没有改变。词法范围的确定意味着'w'会因为在封闭环境中而发生变化 – SymbolixAU