2014-10-30 62 views
1

我正在爲循環編寫一些代碼,我想在循環中粘貼一個字符串。然而,由於某種原因,「粘貼」命令不似乎工作:在一個循環中粘貼一個字符串

一個簡單的例子:

### Creating some variables 
test1<-c(1,2,3,4,5,6,7,8,9,10) 
test2<-c(4,6,7,2,5,3,6,2,7,1) 
test3<-c(3,5,6,7,7,7,7,3,5,3) 

### An example of a loop 
for (i in 1:2) 
{ 
    name<-paste("test",i,sep="") 
    fit <- lm(name~test2+test3) 
} 

我不明白爲什麼這個工程:

fit <- lm(test1~test2+test3) 

但是這並未't:

fit <- lm(name~test2+test3) 

即使粘貼等於test1。

任何幫助將不勝感激。理想情況下,我想使用循環而不是應用。

+0

'test1'是實際的對象,而'name'是它的名字(''test1「')... – Cath 2014-10-30 14:57:29

+0

謝謝,那麼我該如何引用循環中的實際對象呢? – 2014-10-30 14:59:59

+0

爲什麼你的循環是從1:2運行的,你是否想要適應'lm(test2〜test2 + test3)'模型呢? – 2014-10-30 15:09:12

回答

5

首先,把你的載體在data.frame。其次,在這個例子中你不需要循環。

DF <- data.frame(test1, 
       test2, 
       test3) 

fits <- lm(do.call(cbind, DF[, 1:2]) ~ test2 + test3, data=DF) 
#Coefficients: 
#     test1  test2  
#(Intercept) 7.655e+00 1.123e-15 
#test2  -3.669e-01 1.000e+00 
#test3  -1.089e-01 3.594e-17 

注意,對於test2結果從lm(test2 ~ test2 + test3)不同,因爲在RHS響應變量不會被刪除。

+0

+1更復雜,因爲我不知道你可以在響應這樣的矩陣上運行'lm',儘管它在幫助中明確提到(我應該從我每天使用的函數中讀取幫助文件;)) – thothal 2014-10-30 15:36:34

3

get返回命名對象的值:

fit2 <- lm(get(name)~test2+test3)