【问题标题】:Function Error in R, non-numeric argument to binary operatorR中的函数错误,二元运算符的非数字参数
【发布时间】:2016-11-14 09:00:28
【问题描述】:

我正在 R 中创建这个函数,它将创建规范化。在data2YearlyIncome 列中,从最小值到最大值的差异很大。我希望标准化将值从 0 转换为 1。

apply函数的value值覆盖到YearlyIncome

    > x <- data2$YearlyIncome
> a <- min(x)
> b <- max(x)
> fun <- function(x){  (x - a) /  (b - a) }
> fun(data$YearlyIncome)
Error in data$YearlyIncome : object of type 'closure' is not subsettable
> fun <- function(x){ (x - min(x))/(max(x) - min(x)) }
> fun(data2[1])
 Show Traceback

 Rerun with Debug
 Error in FUN(X[[i]], ...) : 
  only defined on a data frame with all numeric variables 
But I got this error:
>Error in x - a : non-numeric argument to binary operator

那我现在该怎么办?

【问题讨论】:

  • 我刚刚通过电子邮件回答了这个问题,它没有解决您的问题吗?向我们展示完整的data2 数据框。
  • 我会使用fun(data2[,1]),因为data2[1] 仍然是一个data.frame。另外,请检查str(data2) 以查看第一列是否为数字变量。我用一个示例数据进行了测试,它对我有用。
  • @akun 所以 akun 你能改变你的答案,它将取代我以前的错误行吗?就像我在定义我的函数 fun
  • @akun 还有 akun 有没有办法在 R studio 中查看 csv 文件?
  • 第一个错误来自拼写错误(data 而不是data2),第二个错误可能来自data2 的第一列不是数字,但我们没有没有足够的信息来解决这个问题

标签: r function arguments normalization min


【解决方案1】:

在这里,我们对第一列进行子集化。不需要apply

fun(data$YearlyIncome)

在哪里

fun <- function(x){ (x - min(x))/(max(x) - min(x)) }

【讨论】:

  • 对不起,我仍然收到以下错误:> help("read.csv") > ?read.csv > data2 options (max.print = 1000000) > x a b fun View(fun) > YearlyIncome
  • @Lee 正如我之前提到的,如果您使用的是单个列 data2[1],则 apply 将不起作用并且不需要。
  • @akun 所以最后一步我该怎么做,只需 YearlyIncome
  • @Lee 你为什么不能这样做fun(data2[1]) BTW,我不知道你为什么在函数之外定义'a'和'b',这样有什么用fun?请检查我的回答中的fun
  • @akun 抱歉,我认为我的意思是 CSV 基本上是一个包含 14 列和大量数据行的文件。我想我在理解你的答案时感到困惑。所以 apply 不能在单列的情况下使用?
猜你喜欢
  • 2016-11-15
  • 1970-01-01
  • 2019-05-03
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2021-03-24
相关资源
最近更新 更多