2016-06-23 4 views
0

Я начинаю учиться в R и пробую себя в написании функции R. Функция, которую я написал, как этоДать свою собственную функцию

male <- c(1:10) 
female <- c(11:20) 
msum <- function(h,j) { 
for(i in 1:length(h)){ 
    e <- c() 
    e[i] = h[i] + j[i] 
    i = i+1 
} 
e 
} 

теперь, когда я вызвать функцию p <- msum(male, female), я смотрю на выход в качестве вектора длины 10 с результатом в сумме мужских и женских векторов, но что я получаю является вектор длины 10 с NA как значение в первых 9 позициях и 30 как последнее значение вектора. Где я иду не так?

+1

Это обзорный вопрос. Вы определили 'e' внутри цикла for, но использовали его вне цикла –

+1

Вам также не нужно увеличивать' i', поэтому удалите строку 'i = i + 1' –

+0

Кроме того, это может быть очень запутанной практикой для обозначения функций то же, что и базовые функции R ('sum' уже существует). – r2evans

ответ

0

См:

male <- c(1:10) 
female <- c(11:20) 

msum <- function(h,j) { 
    e <- c() 
    for(i in 1:length(h)){ 

    e[i] = h[i] + j[i] 
    } 
    e 
} 
msum(male, female) 

[1] 12 14 16 18 20 22 24 26 28 30 
+1

Память' e' должна быть выделена заранее, если это возможно, и может быть здесь. 'e <- integer (length (h))' вместо 'e <- c()' –

0

я мог бы что-то не хватает, но я не знаю, что вам нужна пользовательская функция для данного примера:

male + female 

Хотя я полагаю, вы можете обернуть в него входит:

vect_sum <- function(vec1, vec2) { 
    vec1 + vec2 
} 
vect_sum(male, female) 
Смежные вопросы