我想用函數返回的項填充矢量。但我不能夠執行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