11270 12

[问答] 如何将for循环结果输出到新数据框? [推广有奖]

  • 0关注
  • 1粉丝

硕士生

21%

还不是VIP/贵宾

-

威望
0
论坛币
471 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1126 点
帖子
39
精华
0
在线时间
210 小时
注册时间
2017-7-12
最后登录
2022-5-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我需要查看多个变量下的数据是否呈现正态分布。
利用for循环,能够输出每个变量的检验结果,即以下print(x)能正确地输出。但是要将检验结果输出为一个数据框时,没有报错,但是输出的结果和之前的结果不一样。这是怎么回事?请大神帮忙看看
i <- 7
rnormtest <- data.frame()
for (i in 7:dim(data)[2])
  {
  x <-shapiro.test(data[,i])
  #message("i = ",i)
  #print(x)
  rnormtest <- rbind(rnormtest, x)
  i <- i + 1
}
rnormtest


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:检验结果 正态分布 不一样

回帖推荐

jgchen1966 发表于3楼  查看完整内容

## 试试不用for循环 的新方法: ########################################## library(tidyverse) library(magrittr) ## ##################### rnormtest% map(~shapiro.test(.x))%>% transpose%>% modify_depth(1,unlist)%>% as_tibble%>% select(statistic,p.value)%>% add_column(Va ...
沙发
lemon.d 发表于 2018-11-21 16:00:24 |只看作者 |坛友微信交流群
应该是一致的。

使用道具

藤椅
jgchen1966 发表于 2018-11-21 18:28:32 |只看作者 |坛友微信交流群
##  试试不用for循环 的新方法:
##########################################
  library(tidyverse)
  library(magrittr)

  ## #####################
rnormtest<-  data%>%
                   map(~shapiro.test(.x))%>%
                   transpose%>%
                   modify_depth(1,unlist)%>%
                   as_tibble%>%
                   select(statistic,p.value)%>%
                   add_column(Varname= names(data) )
# ###################################

使用道具

板凳
hszest 学生认证  发表于 2018-11-21 18:41:49 |只看作者 |坛友微信交流群
x本身是一个list,没办法直接用rbind

  1. library(magrittr)

  2. df <- data.frame(
  3.     x = rnorm(1000),
  4.     y = rnorm(1000),
  5.     z = rnorm(1000)
  6. )

  7. resList <- list()

  8. for (i in seq_len(ncol(df))) {
  9.     resList[[i]] <- unlist(shapiro.test(df[[i]]))
  10. }

  11. resDf <- resList %>%
  12.     as.data.frame() %>%
  13.     t() %>%
  14.     as.data.frame() %>%
  15.     `rownames<-`(NULL)
复制代码

使用道具

hszest 发表于 2018-11-21 18:41
x本身是一个list,没办法直接用rbind
谢谢你。但还是不行,在将resList强制转换为数据框的那一步,报错:
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  :
  参数值意味着不同的行数: 0, 4

使用道具

jgchen1966 发表于 2018-11-21 18:28
##  试试不用for循环 的新方法:
##########################################
  library(tidyverse)
谢谢!
因为shapiro.test()跑出来的行数和原数据文件不对等,所以我把最后一行删掉了,把结果提取为新的数据框,就满足我的要求了!谢谢大神!
我对R语言的隐式循环的理解和运用还不是很扎实,谢谢您的帮助。

使用道具

7
谁伴我の闯荡 在职认证  学生认证  发表于 2019-1-16 11:55:28 |只看作者 |坛友微信交流群
jgchen1966 发表于 2018-11-21 18:28
##  试试不用for循环 的新方法:
##########################################
  library(tidyverse)
如果这个检验的分布不是正太分布,而是伽马或者韦伯分布,等带有形状参数的分布的话。。。

需要每一组数据拟合之后再代入数据参数,再检验,,这又要怎么实现呢?感觉不可行啊。。。

循环?

使用道具

8
jgchen1966 发表于 2019-1-16 12:19:01 |只看作者 |坛友微信交流群
谁伴我の闯荡 发表于 2019-1-16 11:55
如果这个检验的分布不是正太分布,而是伽马或者韦伯分布,等带有形状参数的分布的话。。。

需要每一组 ...
建个类似shapiro.test新函数而已。。不必如此死板!!
编程,瞧着死板,实际需要心灵极大的灵活性!!
只有练习至精通,方能达到。。就象任何语言一样。。

使用道具

9
熬夜头会秃 发表于 2019-1-16 17:52:15 来自手机 |只看作者 |坛友微信交流群
小核桃脸婆婆 发表于 2018-11-21 14:48
我需要查看多个变量下的数据是否呈现正态分布。
利用for循环,能够输出每个变量的检验结果,即以下print( ...
用apply啊。。

使用道具

熬夜头会秃 发表于 2019-1-16 17:52
用apply啊。。
谢谢,是初学不精

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 18:11