输出中未分配R函数中更改的单元格值?

时间:2016-07-01 13:22:54

标签: r function

我在写一个非常简单的R函数时遇到了一个问题。该函数的目的是更改data.frame中的单元格值。

enter image description here

f1=function(rn){
  df[rn,2]="b"
}

输入代码后:

  

F1(1)

     

DF

df表看起来仍然相同,没有更改单元格(1,2)。任何人都可以向我解释为什么会这样?

谢谢!

1 个答案:

答案 0 :(得分:2)

这不起作用的原因是因为该功能的范围不包括df。虽然你可以在全球环境中访问df,但它并不能影响全局环境(R试图成为一种功能语言的副作用之一

快速解决此问题的方法是使用访问全局环境的<<-运算符。将您的功能更改为:

function(i) df[i,2] <<- 'b'

编辑:(不能评论不够的代表)对原始问题的评论提供了一个有效的解决方案,但由于您传递的是data.frames而不是修改它们,因此内存和时间效率很低。

以下是一些基准测试(我猜它是最小的,但是很好的做法) 单位:微秒 expr min lq mean median uq max neval df1 <- f(3) 40.742 42.987 51.85747 43.950 61.9140 148.209 1000 g(3) 37.213 40.421 49.80885 41.704 64.6405 127.998 1000

EDIT2:

insertRow=function(rn){ if (T1$TRANS[rn]=="STOP") { T2[2,]<-T1[(rn),] return(T2)} return(0) }

可以改为

insertRow <- function(rn){ if (T1$TRANS[rn]=="STOP") { T2[2,]<<-T1[(rn),]}}