楼主: statchao
9487 9

[问答] 请教for循环语句的问题 [推广有奖]

  • 1关注
  • 2粉丝

副教授

80%

还不是VIP/贵宾

-

威望
0
论坛币
1133 个
通用积分
0.0084
学术水平
3 点
热心指数
2 点
信用等级
0 点
经验
13506 点
帖子
339
精华
0
在线时间
1424 小时
注册时间
2005-4-26
最后登录
2023-2-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
sdata=read.table("D:/sdata.txt",header=T)
attach(sdata)

num=5
library(splines)
require(stats); require(graphics)
basis=bs(sdata$t, df=num)#产生5个B样条基

for (i in 1:num)
bs.i=basis[,i]

bs11=NULL
for (i in 1:num)
bs11=cbind(bs11,bs.i)    #请问这个循环哪里有问题,谢谢!

[/code]
二维码

扫码加我 拉你入群

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

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

关键词:for循环 循环语句 For Graphics require 请教 语句

沙发
qoiqpwqr 发表于 2011-5-14 12:12:52 |只看作者 |坛友微信交流群
你第一个for循环完了之后,bs.i等于basis[, 5]
然后第二个循环把它重复了5次。这应该不是你想要的结果吧。

我不懂B-spline,但是感觉你的两个for循环应该合并为
bs11<- NULL
for (i in 1:num)
    bs11 <- cbind(bs11, basis[,i])
已有 1 人评分论坛币 热心指数 收起 理由
admin_kefu + 25 + 2 热心帮助其他会员

总评分: 论坛币 + 25  热心指数 + 2   查看全部评分

使用道具

藤椅
ryusukekenji 发表于 2011-5-14 13:24:20 |只看作者 |坛友微信交流群
哦?!不过不明白为何楼主这么写?既然bs11 = NULL,为何不干脆只用basis,还需要添加NULL到cbind去?得出的结果 bs11不就等于basis了吗?
  1. >bs11 <- NULL
  2. >for (i in 1:5) cbind(bs11,basis[,i])
复制代码

使用道具

板凳
statchao 发表于 2011-5-14 16:14:02 |只看作者 |坛友微信交流群
谢谢啊,现在可以了。我本想先看看bs.i,然后再把他们合在一起的,因为后面要分别用到这两部分。另外问一下,我有几个因变量,假设有3个,自变量是一样的,如何利用循环把得到的预测结果放在一起?
  1. bs就是前面的结果
  2. ww11=data.frame(cbind(ssq$s.1,ssq$s.2,ssq$s.3,ssq$s.4,ssq$s.5,ssq$s.6,ssq$s.7,bs11))#s.1,s.2,s.3,s.4,s.5,s.6,s.7怎么简写更方便呢?
  3. library(pls)
  4. pred=NULL
  5. plsmod=NULL

  6. for ( i in 1: ncol(sdata))
  7. plsmod[i]=mvr(ww11[,i]~bs11, ncomp =num, data = ww11, scale = TRUE,method = "oscorespls")###问题就出在如何保存plsmod上?
  8. validationplot(plsmod[i,])
  9. pred[i,]=predict(plsmod[i,], comps = 1:num, newdata = predictdata) #预测。
复制代码

使用道具

报纸
ryusukekenji 发表于 2011-5-15 14:13:36 |只看作者 |坛友微信交流群
statchao 发表于 2011-5-14 16:14
谢谢啊,现在可以了。我本想先看看bs.i,然后再把他们合在一起的,因为后面要分别用到这两部分。另外问一下,我有几个因变量,假设有3个,自变量是一样的,如何利用循环把得到的预测结果放在一起?
  1. bs就是前面的结果
  2. ww11=data.frame(cbind(ssq$s.1,ssq$s.2,ssq$s.3,ssq$s.4,ssq$s.5,ssq$s.6,ssq$s.7,bs11))#s.1,s.2,s.3,s.4,s.5,s.6,s.7怎么简写更方便呢?
  3. library(pls)
  4. pred=NULL
  5. plsmod=NULL

  6. for ( i in 1: ncol(sdata))
  7. plsmod=mvr(ww11[,i]~bs11, ncomp =num, data = ww11, scale = TRUE,method = "oscorespls")###问题就出在如何保存plsmod上?
  8. validationplot(plsmod[i,])
  9. pred[i,]=predict(plsmod[i,], comps = 1:num, newdata = predictdata) #预测。
复制代码
没有提供样本数据比较难帮到你, 只能建议试一试 lapply...
  1. num = 1:5
  2. ww11 <- structure(data.frame(lapply(num, function(i) ssq[[i]]$s)),names = names(ssq)) #由于不晓得ssq是list还是data.frame,所以...
复制代码

使用道具

地板
statchao 发表于 2011-5-17 22:13:11 |只看作者 |坛友微信交流群
谢谢啊,s.1+s.2+s.3+s.4+s.4+s.5有没有简写的方式啊?

使用道具

7
shenbaiseshatan 在职认证  发表于 2011-5-18 16:52:36 |只看作者 |坛友微信交流群
假设
  1. s=cbind(s.1,s.2,s.3,s.4,s.5)
复制代码
则可以简写为
  1. rowSums(s)
复制代码
胜人者有力,自胜者强!

使用道具

8
mklyzl 发表于 2014-9-30 10:51:40 |只看作者 |坛友微信交流群
  1. good!
复制代码

使用道具

9
199馨宇 发表于 2015-9-25 21:41:35 |只看作者 |坛友微信交流群
我想运行x<- c(1:60)
for(i in 1:100){y[i]<- x+ rnorm(60,0,15)
i<- i+1}
想产生100组y,但是提示错误

使用道具

10
ryoeng 在职认证  发表于 2015-9-26 13:25:24 |只看作者 |坛友微信交流群
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

使用道具

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

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

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

GMT+8, 2024-5-1 11:08