在函数内索引数据框的问题

时间:2016-09-23 01:27:59

标签: r

我很难在函数内部正确操作数据框。我知道我没有正确编制索引,但我无法弄清楚如何修复它。

我想更改数据框中某个因子的级别,例如:

data <- data.frame(X1=c("a","b","c"))
levels(data$X1) <- c("x","y","z")

但我似乎无法在我的功能中做同样的事情:

> ex <- function(input,var){
+   levels(input$var) <- c("x","y","z")
+   return(var)
+ }
> test <- ex(data,"X1")  
Error in levels(input$var) <- c("x", "y", "z") : 
attempt to set an attribute on NULL

> ex2 <- function(input,var){
+   levels(input[,var]) <- c("x","y","z")
+   return(var)
+ }
> test2 <- ex2(data,"X1")
> test2
[1] "X1"

如果我输出var,我真的不在乎 - 我只是将它作为插图返回。我只是想知道如何正确引用我的数据框和列,以便我可以在函数内部对它们进行操作。

1 个答案:

答案 0 :(得分:1)

问题在于您的功能正在寻找data$var而不是data$X1。此外,如果您有return,那么如果您要分配回data,则它应该是数据框而不是列名。

有很多简单的方法可以解决这个问题。这是一个:

ex <- function(input,var){
  levels(input[,colnames(test) %in% var]) <- c("x","y","z")
  return(input)
  }


test <- ex(data,"X1")  
test