[英]Return subsetted data in R function
我正在嘗試編寫一個簡單的函數來匯總一些數據。 我構造了一個帶有4個參數的函數,以根據某些類別對主表進行子集化。 問題是,當我運行帶有數據子集(聯合)的參數的函數時,看不到打印摘要統計信息或子集表。 基本上,代碼只適用於以下代碼: return(tabel_masive_global) 。
這是代碼。 謝謝。
> #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)
}
return()
結束一個函數-每當您點擊return時,該函數都會為您提供輸出並退出。 對於您的函數,刪除所有返回值,並放在最后:
return(list(tabel_masive_global, subs_unitate, tabel_unitate))
我也不會在函數內部調用library()
-每次調用該函數時,都會重新加載庫,這會大大降低它的速度。
編輯:這是一個返回如何工作的示例,使用注釋(#)進行解釋:
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
我們從cat在2得到的-我們沒有從cat得到行指示符( [1]
)或換行符,以及y和z的列表。 由於該函數已經返回,因此我們不會重新打印x或y。
現在讓我們嘗試分配:
x=mycoolfunction(1,2,3)
[1] 1
2
這次我們只打印和整理。 但是如果我們問x是什么,那就是我們的y和z列表:
x
[[1]]
[1] 2
[[2]]
[1] 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.