我想知道为什么当我跑步时:iris[complete.cases(iris), ]
它的效果非常好。但是当我从下面的函数中做同样的事情时,它会给我一个错误:colMeans(x, na.rm = TRUE) : 'x' must be numeric
?
P.S。 scale()
适用于data.frames ==> scale(mtcars)
。
可以修复吗?
以下是功能:
standard <- function(data, scale = TRUE, center = TRUE, na.rm = TRUE){
data <- if(na.rm) data[complete.cases(data), ]
data[paste0(names(data), ".s")] <- scale(data, center = center, scale = scale)
return(data)
}
# EXAMPLE:
standard(iris)
答案 0 :(得分:2)
是的,错误是由scale()
抛出的,而不是之前的错误。如果要缩放所有数字列并按原样保留其他列,则需要添加一个提取数字列的步骤,缩放它们,然后将它们重新放入。顺便说一下,scale可以处理NA值,所以您可以在complete.cases()
之后发出scale
来电。
您可以通过在函数中添加对browser()
的调用来逐步执行此操作,但我怀疑您会在此处发现错误:
scale(data, center = center, scale = scale)
请参阅scale()
参数
x数字矩阵(如对象)。
以下是调试方法:
使你的功能成为现实:
standard <- function(data, scale = TRUE, center = TRUE, na.rm = TRUE){
browser()
data <- if(na.rm) data[complete.cases(data), ]
data[paste0(names(data), ".s")] <- scale(data, center = center, scale = scale)
return(data)
}
然后尝试使用standard(immer)
调用它
它将打开一个浏览器,让您逐步执行该函数中的每个语句。如果在RStudio中执行此操作,则可以在右上方窗口的“环境”选项卡中查看环境更改。使用命令help
查看如何浏览浏览器,但一般情况下,您将使用n
和/或s
逐步浏览每个语句。 Q
让您退出浏览器,并从您的函数中删除browser()
调用,让您可以像平常一样运行它。