如何使R函数对数据帧产生全局影响



我一直在尝试创建一个函数,该函数将永久更改数据帧特定单元格中的值。我将数据帧名称、要更改的行索引和新名称作为字符串插入。但是,该函数似乎更改了本地环境中的值名称,而不是全局的。

功能如下:

#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中通过引用吗?

最新更新