我的问题是我想使用一个函数在全局数据框中将随机值更改为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)。我怎样才能解决这个问题?谢谢!
答案 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中的最佳做法是避免使用<<-
函数。