【发布时间】:2018-09-06 11:34:05
【问题描述】:
如果它们是“字符”,我正在尝试将数据框中的变量的数据类型更改为“因子”。我尝试使用如下示例数据复制问题
a <- c("AB","BC","AB","BC","AB","BC")
b <- c(12,23,34,45,54,65)
df <- data.frame(a,b)
str(df)
'data.frame': 6 obs. of 2 variables:
$ a: chr "AB" "BC" "AB" "BC" ...
$ b: num 12 23 34 45 54 65
我写了下面的函数来实现这一点
abc <- function(x) {
for(i in names(x)){
if(is.character(x[[i]])) {
x[[i]] <- as.factor(x[[i]])
}
}
}
如果我传递数据帧 (df),该函数将正确执行,但它仍然不会将“字符”更改为“因子”。
abc(df)
str(df)
'data.frame': 6 obs. of 2 variables:
$ a: chr "AB" "BC" "AB" "BC" ...
$ b: num 12 23 34 45 54 65
注意:它与 for 循环和 if 条件完美配合。当我试图通过围绕它编写一个函数来概括它时,出现了问题。
请帮忙。我错过了什么?
【问题讨论】:
-
让你的函数返回
x,然后执行df <- abc(df)。 -
正如@Roland 所说。 R 中的函数不是通过引用来执行的。如果您在函数内部更改函数参数,则对象在函数外部保持不变。另外,最后你需要你的函数
return(x)。 -
@Roland 和 Nicola 感谢您的建议。它奏效了。