2016-07-12 9 views
0

Я создаю эту функцию в R, которая создаст нормализацию. Столбец data2, YearlyIncome имеет большую разницу от минимального значения до наивысшего значения. Я хочу нормализовать значение преобразования от 0 до 1.Функция Ошибка в R, нечисловой аргумент для двоичного оператора

Значения значений функции приложения переписываются на 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 

Так что теперь делать?

+2

Я просто ответил на этот вопрос по электронной почте, так это не исправить вашу проблему? Покажите нам полный фрейм данных 'data2'. –

+1

Я бы использовал 'fun (data2 [, 1])' as 'data2 [1]' по-прежнему является data.frame. Кроме того, проверьте 'str (data2)', чтобы увидеть, является ли первый столбец числовой переменной. Я тестировал данные примера и работает для меня. – akrun

+0

@akun so akun вы можете изменить свой ответ на него, заменит мои старые строки ошибки? например, я просто потерял то, что должно быть после определения моей функции fun <- function (x) {(x - min (x))/(max (x) - min (x))}? – Lee

ответ

0

Здесь мы подмножаем первый столбец. Для этого не нужен apply.

fun(data$YearlyIncome) 

где

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

извините, я до сих пор получаю следующую ошибку:> help ("read.csv") >? read.csv > data2 <- read.csv (file.choose(), header = TRUE) > опции (max.print = 1000000) > x <- data2 $ YearlyIncome > a <- min (x) > b <- max (x) > fun <- function (x) {(x - a)/(b - a)} > Вид (забава) > YearlyIncome <- apply (data2 [1], 2, fun) Ошибка в x - a: нечисловой аргумент двоичному оператору – Lee

+0

@Lee Как я упоминал ранее, если вы используете один столбец 'data2 [1]', применение не будет работать и не понадобится. – akrun

+0

@akun, поэтому для последнего шага, что мне делать, просто YearlyIncome <- (data2 [1], 2, fun). Извините, но можете ли вы написать ответ за последние 4 шага? Я обещаю, что соглашусь. Просто новичок здесь. – Lee

 Смежные вопросы

  • Нет связанных вопросов^_^