我很难在函数内部正确操作数据框。我知道我没有正确编制索引,但我无法弄清楚如何修复它。
我想更改数据框中某个因子的级别,例如:
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
,我真的不在乎 - 我只是将它作为插图返回。我只是想知道如何正确引用我的数据框和列,以便我可以在函数内部对它们进行操作。
答案 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