返回R函数中的子集化数据

时间:2015-07-08 14:09:45

标签: r function subset

我正在尝试编写一个简单的函数来汇总一些数据。 我构造了一个带有4个参数的函数,根据某些类别对主表进行子集化。 问题是当我运行带有我的数据子集的参数的函数(unitate)时,我看不到打印摘要统计信息或子集表。基本上,代码只适用于以下行: 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)
  }

1 个答案:

答案 0 :(得分:0)

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,我们从2上的猫得到了[1] - 我们没有得到行指示符(x=mycoolfunction(1,2,3) [1] 1 2 )或来自cat的换行符,以及y和z的列表。 我们不会重新打印x或y,因为函数已经返回。

现在让我们尝试分配:

x

[[1]]
[1] 2

[[2]]
[1] 3

这次我们只打印和猫。 但是如果我们问x是什么,那就是我们的y和z列表:

# resizing the yticks list and changing the values
ax.set_yticks(yy[0,::10])
# changing the yticks labels
ax.set_yticklabels(dates[::10], color='lightseagreen')
# changing the zticks labels whereas zticks is not resized
# try adding
ax.set_zticks(consumptions[::100000])
# before changing the labels
ax.set_zticklabels(consumptions[::100000], color='lightseagreen')