楼主: userzht
1942 6

[问答] for loop只计算第一个元素的结果 [推广有奖]

  • 6关注
  • 3粉丝

已卖:1份资源

博士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
2362 个
通用积分
1.0004
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
4854 点
帖子
184
精华
0
在线时间
224 小时
注册时间
2009-5-19
最后登录
2021-10-19

楼主
userzht 发表于 2015-10-21 17:47:23 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

写了以下一段程序:
  1. a <- c(77.7,43.2,42.0,79.1,52.1,43.8,88.2,85.4)
  2. b <- c(81.9,54.5,70.2,83.9,83.9,57.3,92.6,91.9)

  3. na <- 1752
  4. nb <- 1720

  5. a1 <- round(a*na/100)
  6. b1 <- round(b*nb/100)

  7. a0 <- na-a1
  8. b0 <- nb-b1

  9. pv <- function(df) {
  10.         pv <- array()
  11.         for (i in 1:length(a)) {
  12.                 pv[i] <- chisq.test(matrix(as.vector(df[i,]),2,2))$p.value
  13.                 return(pv)
  14.         }
  15. }
复制代码
结果只出来第一个,也就是i=1时,后面的为什么出不来啊?

试着改了一点,还是不行:

  1. > pv <- function(df) {
  2. +         pv <- array(rep(0,length(a)),c(1,length(a)))
  3. +         for (i in 1:length(a)) {
  4. +                 pv[i] <- chisq.test(matrix(as.vector(df[i,]),2,2))$p.value
  5. +                 return(pv)
  6. +         }
  7. + }
  8. > pv(df)
  9.             [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
  10. [1,] 0.002177379    0    0    0    0    0    0    0
复制代码



二维码

扫码加我 拉你入群

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

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

关键词:loop For 元素

沙发
hongweigg 发表于 2015-10-21 22:05:30
return(pv) 应放到for循环外,如果放到循环内,则执行第一次循环到return()语句就会跳出循环,后面的循环将不再执行。
下面为修改后的代码:

> pv <- function(df) {
+         pv <- array(rep(0,length(a)),c(1,length(a)))
+         for (i in 1:length(a)) {
+                 pv <- chisq.test(matrix(as.vector(df[i,]),2,2))$p.value
+         }
+         return(pv)
+ }
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

藤椅
userzht 发表于 2015-10-22 08:33:35
hongweigg 发表于 2015-10-21 22:05
return(pv) 应放到for循环外,如果放到循环内,则执行第一次循环到return()语句就会跳出循环,后面的循环将 ...
多谢多谢,不过{}里那个pv应该是pv,要不然就会只留下最后一个啦

板凳
userzht 发表于 2015-10-22 08:35:27
hongweigg 发表于 2015-10-21 22:05
return(pv) 应放到for循环外,如果放到循环内,则执行第一次循环到return()语句就会跳出循环,后面的循环将 ...
多谢多谢,不过{}里那个pv应该是pv[i],要不然就会只留下最后一个啦

报纸
userzht 发表于 2015-10-22 08:42:09
userzht 发表于 2015-10-22 08:35
多谢多谢,不过{}里那个pv应该是pv[i],要不然就会只留下最后一个啦
或者:
  1. pv <- array()
  2. for (i in 1:length(a)) {
  3.         pv[i] <- chisq.test(matrix(as.vector(df[i,]),2,2))$p.value
  4. }
  5. pv
复制代码

地板
userzht 发表于 2015-10-22 08:46:34
userzht 发表于 2015-10-22 08:35
多谢多谢,不过{}里那个pv应该是pv[i],要不然就会只留下最后一个啦
或者:
  1. pv <- array()
  2. for (i in 1:length(a)) {
  3.         pv[i] <- chisq.test(matrix(as.vector(df[i,]),2,2))$p.value
  4. }
  5. pv
复制代码

7
hongweigg 发表于 2015-10-22 09:16:01
userzht 发表于 2015-10-22 08:46
或者:
是的,可能是我编辑的过程中不小心删掉了,关键是return语句移到for循环外。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 23:01