使用函数更改数据框值

时间:2015-12-10 19:00:00

标签: r function dataframe global-variables

我的问题是我想使用一个函数在全局数据框中将随机值更改为NA。

df是一个包含230行和2列的数据框。

抽象代码:

emptychange<- function(x){
  placenumber <- round(runif(1,min= min(1),max=max(nrow(x))))
  x[placenumber,2] <<- NA
}

emptychange(df)

错误是:“x [placenumber,2]中的错误&lt;&lt; - NA:对象'x'未找到”。

我认为错误是,r搜索全局变量'x'并且不使用函数x-value(在本例中为df)。我怎样才能解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:1)

这很有效。问题是:<<- NA当您想要为函数外部的对象赋值时,使用双箭头。在您的情况下,您的x位于函数内部。

df1 <-data.frame(x = 1, y = 1:10)

emptychange<- function(x){
  placenumber <- round(runif(1,min= min(1),max=max(nrow(x))))
  x[placenumber,2] <- NA
  return(x)
}

emptychange(df1)

答案 1 :(得分:1)

如果您希望在控制台上完成此操作,则可以使用sample来自[<-函数内的行计数:

> df1 <-data.frame(x = 1, y = 1:10)
> df1[sample(nrow(df1), 1) , 2] <- NA
> df1
   x  y
1  1  1
2  1  2
3  1  3
4  1  4
5  1  5
6  1 NA
7  1  7
8  1  8
9  1  9
10 1 10

如果要破坏性地更改赋予函数的dataframe参数,则应该将返回的值赋值回原始名称:

>  randNA.secCol <- function(df) {df[sample(nrow(df), 1) , 2] <- NA; df}
> df1 <-data.frame(x = 1, y = 1:10)
> df1 <- randNA.secCol(df1)

R中的最佳做法是避免使用<<-函数。