2013-06-14 5 views
-1

이 코드 나는 모든을 통해 루프에 찾고 있어요 기술 통계R : 요약 테이블에 반복 요약 통계

densities <- abs(rnorm(100,mean = 15000, sd = 11600)) #just a vector of nonzero normal data 

#run through descriptive statistics 

function.names <- c("mean","quantile","IQR","sd","max","min","median") 
for (i in 1:length(function.names)){ 
    assign("fun1", get(function.names[i])) 
    assign(paste("data_", function.names[i], sep=""), fun1(densities)) 
    rm(fun1) #start over 
} 

range <- max(densities)-min(densities) #range 
pearson_mode_skewness = (mean(densities)- median(densities)/sd(densities)) 
df_desc <- data.frame(function.names, paste("data_", function.names, sep="")) #plot in a dataframe/cell array 


df_desc 

> df_desc 
    function.names paste..data_...function.names..sep...... 
1   mean        data_mean 
2  quantile       data_quantile 
3   IQR         data_IQR 
4    sd         data_sd 
5   max         data_max 
6   min         data_min 
7   median        data_median 

==========

을 계산하는 데 사용됩니다 이 설명적인 통계. 나중에 더 많은 함수를 포함해야 할 수도 있으므로 확장 가능한 함수 벡터로 만들었습니다. 위에 표시된 것처럼 두 번째 열의 값을 호스팅하는 효과적인 요약 슬라이드를 만들려면 어떻게해야합니까? 각 함수의 을 원합니다 (다중 결과 통계의 경우 문자열로 잘리는 것이 좋을 것입니다.)이 함수를 다중 밀도 벡터 (및 하위 샘플).

\ 미리 감사드립니다.

편집 : 코드를 작동 전류는 답변에 따라

#DESCRIPTIVE STATS 
descriptive_table <- function(data){ 
    funlist <- list(mean,quantile,IQR,sd,max,min,median) 
    temp <- cbind(c("mean","quantile","IQR","sd","max","min","median"), lapply(funlist, function(fn) fn(data))) 
    colnames(temp) <- c("Statistic", "Value") 
    descriptives <- rbind(temp, c("range",max(data)-min(data)), 
         c("Pearson Mode Skewness", (mean(data)- median(data)/sd(data)))) 
    print(descriptives) 
} 

답변

2

여기에 더 나은 전략입니다 :

나중에 당신 때문에 당신이 운이 될 것이다 이러한 기능의 이름을 원하는 경우
> funlist <- list(mean,quantile,IQR,sd,max,min,median) 
> vals <-lapply(funlist, function(fn) fn(densities)) 
[[1]] 
[1] 16291.04 

[[2]] 
     0%  25%  50%  75%  100% 
    195.831 7080.740 16736.867 23635.907 46913.716 

[[3]] 
[1] 16555.17 

[[4]] 
[1] 10831.34 

[[5]] 
[1] 46913.72 

[[6]] 
[1] 195.831 

[[7]] 
[1] 16736.87 

(또는 I) 그들이 들어오는 이름을 밝히지 않았습니다. 더 조심해야 할 수도 있습니다.

funlist2 <- list(mean=mean,quantile=quantile,IQR=IQR, 
       sd=sd,max=max,min=min,median=median) 
vals <- lapply(funlist2, function(fn) fn(densities)) 
names(vals) <- names(funlist2) 
+0

매우 도움이됩니다. 감사 – highdimensionalbiology