我一直在嘗試創建一個函式,該函式將永久更改資料框特定單元格中的值。我將資料框名稱、我希望更改的行索引和新名稱作為字串插入。但是,該函式似乎在本地環境中更改了值名稱,而不是全域。
功能如下:
#change name function
name_change <- function(df, row, name) {
df[row, 1] = name
return(df[row, 1])
}
例如,如果資料框是:
| 姓名 | B欄 |
|---|---|
| 標記 | 2 |
| 貝絲 | 4 |
函式 name_change(df, 2, 'Jess') 會將 Beth 更改為 Jess。
當作為原始代碼插入時,它會永久更改值。但是當用作函式時不起作用。
df[2, 1] = 'Jess'
在此先感謝您的時間
uj5u.com熱心網友回復:
您正在回傳單元格的值,而不是突變的 df。R 按值傳遞引數,因此您可以想象函式修改傳入的 df 副本。解決方案是回傳變異的 df 并重新分配它。
你可以在R中通過參考嗎?
uj5u.com熱心網友回復:
已經提供的解決方案的替代方法是使用超賦值運算子<<-。普通賦值<-(或您使用的“=”)僅在您的函式中運行environment。超級賦值超出了函式的閉包范圍,因此可以修改駐留在全域環境中的資料框。但是請注意,這只是一個快速的'n'dirty修復。
也就是說,代碼將如下所示:
#change name function
dirty_name_change <- function(df, row, name) {
df[row, 1] <<- name ## note the double arrow
}
uj5u.com熱心網友回復:
如果你像這樣改變你的功能:
name_change <- function(df, row, name) {
df[row, 1] = name
return(df)
}
然后將函式的結果分配回原始 df,您將獲得所需的更改:
df = name_change(df,2,'Jess')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450541.html
