2015-07-08 3 views
0

Я пытаюсь написать простую функцию для суммирования некоторых данных. Я построил функцию с 4 аргументами, чтобы подмножить основную таблицу на основе некоторых категорий. Проблема заключается в том, что когда я запускаю функцию с аргументами, которые подмножают мои данные (объединяются), я не вижу напечатанных сводных статистических данных или таблиц подмножеств. В основном код работает только до строки: return (tabel_masive_global).Возвращает подмножество данных в функции R

Вот код. Благодарю.

> #Functie tabel avansat 
fct_tab_av <- function(baza, unitate){ 
    #Incarcare pachete necesare 
    library(plyr) 
    library(xlsx) 

    #Sumarizarea pe toti peretiii 
    print("---------------------------------------------------------------------------------------------") 
    print("#Sumarizare pentru toti peretii") 
    print(summary(baza)) 

    #Tabel statistic global pe masive 
    print("---------------------------------------------------------------------------------------------") 
    print("#Tabel statistic global pe masive") 
    tabel_masive_global <- ddply(baza,~Masiv, summarise, Nr_Pereti=length(Masiv),S_tot = sum(Suprafata), S_med=mean(Suprafata), H_med = mean(Inaltimea), Pa_med=mean(Panta), Alt_med=mean(Altitudinea), SD_Suprafata=sd(Suprafata), SD_Inaltimea=sd(Inaltimea), SD_Panta=sd(Panta), SD_Altitudinea=sd(Altitudinea)) 
    return(tabel_masive_global) 

    #Subset pe unitate 
    subs_unitate <- subset(baza, Unitate=="unitate") 
    return(subs_unitate) 
    #Sumarizare pe unitate 
    print("---------------------------------------------------------------------------------------------") 
    print("#Sumarizare pe unitate") 
    print(summary(subs_unitate)) 

    #Tabel statistic pe unitate in functie de litologie 
    print("---------------------------------------------------------------------------------------------") 
    print("Tabel statistic pe unitate in functie de litologie") 
    tabel_unitate <- ddply(subs_unitate, ~Litologia_N, summarise, Nr_Pereti=length(Masiv), Proc_Pereti=((Nr_Pereti*100)/(nrow(x))), S_tot = sum(Suprafata), S_med=mean(Suprafata), H_med = mean(Inaltimea), Pa_med=mean(Panta), Alt_med=mean(Altitudinea), SD_Suprafata=sd(Suprafata), SD_Inaltimea=sd(Inaltimea), SD_Panta=sd(Panta), SD_Altitudinea=sd(Altitudinea)) 
    return(tabel_unitate) 
    } 
+2

как только вы нажмете возврат, функция завершается. Сделайте что-то вроде возврата (a, b, c, d) в самом конце. – jeremycg

+0

@jeremycg вы должны написать это как ответ –

+0

Вы можете вернуть только одну вещь из функции. Если вы хотите вернуть несколько элементов, вы можете поместить их в список 'return (list (a, b, c, d))' на * конец * вашей функции. – MrFlick

ответ

0

return() завершает функцию - в любое время вы нажмете возвращение, функция даст вам выход, и выход. Для вашей функции, удалить все возвращается, и поставить в самом конце:

return(list(tabel_masive_global, subs_unitate, tabel_unitate)) 

Я также не называю library() внутри функции - каждый раз, когда вы вызываете функцию, вы перезагрузить библиотеки, которые будут замедлять его значительно.

Edit: Вот пример того, как вернуть работы, используя комментарии (#), чтобы объяснить:

mycoolfunction <- function(x,y,z){ 
    print(x) #prints out the x value 
    cat(y) #another way of printing 
    return(list(y,z)) #returns a list of y and z as an object! function is now exited 
    print(x) #not done 
    print(y) #not done 
} 

Теперь давайте посмотрим, что мы получим:

mycoolfunction(1,2,3) 

Вы должны получить:

[1] 1 
2[[1]] 
[1] 2 

[[2]] 
[1] 3 

У кого есть [1] 1 мы получаем от печати 1, 2 мы получили от кота на 2 - w e не получают указатель строки ([1]) или новую строку от cat, а список y и z. Мы не перепечатываем x или y, поскольку функция уже вернулась.

Теперь попробуем с назначением:

x=mycoolfunction(1,2,3) 
[1] 1 
2 

На этот раз мы только печать и кошка. Но если мы спрашиваем, что х, это наш список у и г:

x 

[[1]] 
[1] 2 

[[2]] 
[1] 3 
+0

Не распечатывает подмножество данных. Нужно ли писать сводки после обратной линии? – Litwos

+1

После того, как функция обращается к возврату, это делается, поэтому поставим вышеприведенные резюме. Если вы просто хотите распечатать на консоль, то вы вернетесь к печати, если хотите использовать их по-другому, возврат - это то, что вы хотите. – jeremycg

+0

Я использовал возврат, как вы предлагали, но он по-прежнему не печатает подмножаемые фреймы данных или сводки для подмножеств данных. – Litwos

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