簡體   English   中英

在R函數中返回子集數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM