1
我做了簡易R腳本並運行:爲什麼在函數調用之後R重置dataframe列?
f <- data.frame(x = c(1,1))
f$y <- NA
test <- function(n) {
f$y[1] <- 1
print(f)
}
test(0)
print(f)
結果是
> test(0)
x y
1 1 1
2 1 NA
> print(f)
x y
1 1 NA
2 1 NA
>
我希望在最終輸出(1,1)(1,NA),但由於某種原因,F $ y [1]已被重置爲NA。
當我內聯函數時,結果是確定的。
爲什麼函數調用對dataframe列有這個副作用? 它可以避免嗎?
在函數式編程,功能應該不會有*副作用*。這意味着如果一個函數改變了一個數據框,那麼這個改變只是該函數的局部。如果你希望這個改變在函數外部可用,那麼這個函數應該'返回()'數據框,你應該分配結果。 – Gregor
你的問題似乎並不是*「函數調用有這個數據幀列的副作用」*,而是你的數據框在運行該函數後沒有改變 - 它對你的數據框沒有任何影響(在它之外內部副本)。 – Gregor
所以我需要在我的代碼中寫f < - test(f)以保持更改。或者更好地重寫它,並返回另一個只有y列的'結果'數據框。對? – Ben