我正在尝试编写一个简单的函数来汇总一些数据。 我构造了一个带有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)
}
答案 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')