改变R中函数中的全局对象/通过引用

时间:2015-11-14 15:08:07

标签: r

我在R中有一些数据帧,例如:

df1
df2
df3

我想对它们采取一些措施,例如明确NA值:

df1[is.na(df1)]=0
df2[is.na(df2)]=0
df3[is.na(df3)]=0

我虽然可以这样做:

lapply(c(df1,df2,df3),function(x){x[is.na(x)]=0}) 

但它似乎不起作用......我也尝试过使用<<-

我错过了什么吗?如何更改函数内的全局对象?

1 个答案:

答案 0 :(得分:1)

我们可以使用list2envlapply进行更改以反映在全局环境中(尽管不建议这样做,因为我们可以执行list中的所有操作)。< / p>

list2env(lapply(mget(paste0('df', 1:3)), function(x) 
      replace(x, is.na(x), 0)), envir=.GlobalEnv)
df1
#  col1 col2
#1    0    1
#2    1    2
#3    2    0
#4    3    4

数据

df1 <- data.frame(col1= c(NA, 1:3), col2= c(1:2, NA, 4))
df2 <- data.frame(col1= c(1:3, NA), col2= c(1, NA, 3, 4))
df3 <- data.frame(col1= c(2,4, NA), col2 = c(1, NA, 2))