如何让 R 函数对数据帧产生全局影响?
How to get an R function to have a global effect on a dataframe?
我一直在尝试创建一个函数,该函数将永久更改数据框中特定单元格中的值。我插入数据框名称、我希望更改的行索引以及作为字符串的新名称。但是,该函数似乎在局部环境中更改值名称,而不是全局。
函数如下:
#change name function
name_change <- function(df, row, name) {
df[row, 1] = name
return(df[row, 1])
}
例如如果数据框是:
Name
Column B
Mark
2
Beth
4
函数 name_change(df, 2, 'Jess') 会将 Beth 更改为 Jess。
当作为原始代码插入时,它会永久更改值。但是当用作函数时则不起作用。
df[2, 1] = 'Jess'
提前感谢您的宝贵时间
如果您像这样更改函数:
name_change <- function(df, row, name) {
df[row, 1] = name
return(df)
}
然后将函数的结果赋值回原来的df,就会得到你要找的变化:
df = name_change(df,2,'Jess')
您正在 return 计算单元格的值,而不是变异的 df。 R 按值传递参数,因此您可以想象函数修改传入的 df 的副本。解决方案是 return 变异的 df 并重新分配它。
Can you pass-by-reference in R?
已经提供的解决方案的替代方法是使用超赋值运算符<<-
。普通赋值 <-
(或您使用的“=”)仅在函数的 environment
中运行。超赋值超出了函数的 closure and can thus modify the dataframe residing in the global environment. Note, though, this is a .
也就是说,代码应该是这样的:
#change name function
dirty_name_change <- function(df, row, name) {
df[row, 1] <<- name ## note the double arrow
}
我一直在尝试创建一个函数,该函数将永久更改数据框中特定单元格中的值。我插入数据框名称、我希望更改的行索引以及作为字符串的新名称。但是,该函数似乎在局部环境中更改值名称,而不是全局。
函数如下:
#change name function
name_change <- function(df, row, name) {
df[row, 1] = name
return(df[row, 1])
}
例如如果数据框是:
Name | Column B |
---|---|
Mark | 2 |
Beth | 4 |
函数 name_change(df, 2, 'Jess') 会将 Beth 更改为 Jess。
当作为原始代码插入时,它会永久更改值。但是当用作函数时则不起作用。
df[2, 1] = 'Jess'
提前感谢您的宝贵时间
如果您像这样更改函数:
name_change <- function(df, row, name) {
df[row, 1] = name
return(df)
}
然后将函数的结果赋值回原来的df,就会得到你要找的变化:
df = name_change(df,2,'Jess')
您正在 return 计算单元格的值,而不是变异的 df。 R 按值传递参数,因此您可以想象函数修改传入的 df 的副本。解决方案是 return 变异的 df 并重新分配它。
Can you pass-by-reference in R?
已经提供的解决方案的替代方法是使用超赋值运算符<<-
。普通赋值 <-
(或您使用的“=”)仅在函数的 environment
中运行。超赋值超出了函数的 closure and can thus modify the dataframe residing in the global environment. Note, though, this is a
也就是说,代码应该是这样的:
#change name function
dirty_name_change <- function(df, row, name) {
df[row, 1] <<- name ## note the double arrow
}