s******y 发帖数: 522 | 1 比方说有一个函数summary,来提取一个vector的summary stats
summary = function(x){
mean = mean(x)
sd = sd(x)
max = max(x)
list(mean=mean, sd=sd, max=max)
}
把函数apply到matrix Z的每一列
apply(Z , 2, summary)
但是返回的格式是list of lists
$result.1
$result.1$mean
[1] -1.522619
$result.1$sd
[1] 1.101962
$result.1$max
[1] 2.10
$result.2
。。。。。。
但我想得到的结果是一个data frame,包含mean, sd, max三个变量
应该怎么改呢 | s*********e 发帖数: 1051 | 2 is it what you need?
summ = function(x){
mean = mean(x)
sd = sd(x)
max = max(x)
list(mean=mean, sd=sd, max=max)
}
Z <- matrix(rnorm(100), nrow = 20, ncol = 5)
library(foreach)
test <- data.frame(foreach(i = 1:ncol(Z), .combine = rbind) %do% summ(Z[, i]
), row.names = NULL)
print(test) | s******y 发帖数: 522 | 3 谢谢,foreach是可以,想知道有没有更直接的方法
因为这段本身就是嵌套在一个大的foreach 循环里面
不太敢多用foreach,因为以前曾出现过8GB内存被一下子吃掉,不得不终止进程
i]
【在 s*********e 的大作中提到】 : is it what you need? : summ = function(x){ : mean = mean(x) : sd = sd(x) : max = max(x) : list(mean=mean, sd=sd, max=max) : } : Z <- matrix(rnorm(100), nrow = 20, ncol = 5) : library(foreach) : test <- data.frame(foreach(i = 1:ncol(Z), .combine = rbind) %do% summ(Z[, i]
| s*********e 发帖数: 1051 | 4 matrix(unlist(your_result), ncol = 3, dimnames = list(1:5, c('mean', 'sd', '
max'))) | k*******a 发帖数: 772 | 5 因为list 本身可以看做是data.frame ,你可以
do.call("rbind", apply(Z , 2, summary)) | s******y 发帖数: 522 | | a***d 发帖数: 336 | 7 if you replace list in the output line of the summary function by c(mean=
mean, sd=sd, max=max), you will get all output in one matrix. Just need to
transpose it afterwards.
【在 s******y 的大作中提到】 : 比方说有一个函数summary,来提取一个vector的summary stats : summary = function(x){ : mean = mean(x) : sd = sd(x) : max = max(x) : list(mean=mean, sd=sd, max=max) : } : 把函数apply到matrix Z的每一列 : apply(Z , 2, summary) : 但是返回的格式是list of lists
| m****n 发帖数: 3016 | 8 Second this.
summary = function(x){
mean = mean(x)
sd = sd(x)
max = max(x)
c(mean, sd, max)
}
Z=matrix(rnorm(80*100,mean=0,sd=1), 80, 100)
Z_sum=t(apply(Z , 2, summary
【在 a***d 的大作中提到】 : if you replace list in the output line of the summary function by c(mean= : mean, sd=sd, max=max), you will get all output in one matrix. Just need to : transpose it afterwards.
| o****o 发帖数: 8077 | 9 j<-apply(Z, 2, summary)
matrix(data.frame(j), ncol=3, byrow=T)
【在 s******y 的大作中提到】 : 比方说有一个函数summary,来提取一个vector的summary stats : summary = function(x){ : mean = mean(x) : sd = sd(x) : max = max(x) : list(mean=mean, sd=sd, max=max) : } : 把函数apply到matrix Z的每一列 : apply(Z , 2, summary) : 但是返回的格式是list of lists
| I*****a 发帖数: 5425 | 10 Above are all right.
or you may consider using sapply after you change your input matrix to a dat
a.frame.
sapply(data.frame(matrix), summary)
【在 s******y 的大作中提到】 : 比方说有一个函数summary,来提取一个vector的summary stats : summary = function(x){ : mean = mean(x) : sd = sd(x) : max = max(x) : list(mean=mean, sd=sd, max=max) : } : 把函数apply到matrix Z的每一列 : apply(Z , 2, summary) : 但是返回的格式是list of lists
|
|