我想用函数返回的项填充矢量。但我不能够执行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
我想用函数返回的项填充矢量。但我不能够执行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
此作品为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
通常要使用内的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
我不认为你的理由是**为什么**'w'没有改变。词法范围的确定意味着'w'会因为在封闭环境中而发生变化 – SymbolixAU
的功能产生错误 – SymbolixAU
你不需要所有的循环等 - 'test < - c(1,3,4,7,8,9); fn < - function(x)x [x %% 2 == 1]; fn(test)' – thelatemail