2014-02-13 1 views
0

Я практикую использование функции apply в R, и поэтому я пишу простую функцию для применения к кадру данных.R: Правильное использование dataframe в качестве аргумента функции

У меня есть dataframe с 2 столбцами.

V1 V2 
1  3 
2  4 

я решил сделать некоторые основные арифметические операции и есть ответ на 3-й колонке, в частности, я хочу, чтобы умножить первый столбец на 2, а второй столбец на 3, а затем просуммировать их.

V1 V2 V3 
1  3  11 
2  4  16 

Вот что я имел в виду:

mydf <- as.data.frame(matrix(c(1:4),ncol=2,nrow=2)) 
some_function <- function(some_df) {some_df[,1]*2 + 
            some_df[,2]*3} 
mydf <- apply(mydf ,2, some_function) 

Но что случилось с моими аргументами в функции? R дает мне ошибку в отношении размерности кадра данных. Зачем?

+0

Вы выбрали умножение в качестве примера или это ваша фактическая задача? –

+0

Это был всего лишь пример –

ответ

1

Три вещи неправильно:

1) применяются «петли» вектор либо каждого столбца или строки, так что вы просто адрес имя [1] не [1]
2) вам необходимо запустить с помощью строка MARGIN = 1, а не 2
3) вы должны cbind результат, поскольку применяется не добавляет, так что вы перезапись вектор

mydf <- as.data.frame(matrix(c(1:4),ncol=2,nrow=2)) 

some_function <- function(some_df) {some_df[1]*2 + 
             some_df[2]*3} 

mydf <- cbind(mydf,V3=apply(mydf ,1, some_function)) 

# V1 V2 V3 
#1 1 3 11 
#2 2 4 16 

, но, вероятно, проще всего сделать векторную математику:

mydf$V3<-mydf[,1]*2 + mydf[,2]*3 

потому что векторная математика - одна из величайших вещей о R

+0

Спасибо! Это было очень полезно. –

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