我一直在尝试创建一个函数,该函数将永久更改数据帧特定单元格中的值。我将数据帧名称、要更改的行索引和新名称作为字符串插入。但是,该函数似乎更改了本地环境中的值名称,而不是全局的。
功能如下:
#change name function
name_change <- function(df, row, name) {
df[row, 1] = name
return(df[row, 1])
}
例如,如果数据帧是:
名称 | B列 |
---|---|
标记 | 2 |
贝丝 | 4 |
如果您这样更改函数:
name_change <- function(df, row, name) {
df[row, 1] = name
return(df)
}
然后将函数的结果分配回原始df,您将得到您想要的更改:
df = name_change(df,2,'Jess')
已经提供的解决方案的替代方案是使用超赋值运算符<<-
。普通赋值<-
(或您使用的'='(仅在函数的environment
中操作。超级分配超出了函数的闭包,因此可以修改驻留在全局环境中的数据帧。不过,请注意,这只是一个快速的"致命修复"。
也就是说,代码读起来是这样的:
#change name function
dirty_name_change <- function(df, row, name) {
df[row, 1] <<- name ## note the double arrow
}
您返回的是单元格的值,而不是突变的df。R按值传递参数,因此您可以想象函数修改传入的df的副本。解决方案是返回变异的df并重新分配它。
你能在R中通过引用吗?