作者:
wanson (望生)
2015-01-18 04:11:08請問一下
今天我有一個資料夾 t
變項
x1 y1 x2 y2
1 46 5452 9 885
2 546 321 87 8
我想要使用一個loop 去畫圖
plot(t$x1, t$y1)
plot(t$x2, t$y2)
for(i in 1:2){
plot(t$x[i], t$y[i])
}
我使用以下的code,但他出現錯誤
我上網找了幾個網站 但沒有找到解答
想要請問板上的高手
是那出現錯誤
謝謝
作者: obarisk (OSWALT) 2015-01-18 07:17:00
x1和x[1]不同你用plot(t[ ,1], t[, 2])比較好另外,圖如果沒存,用for loop不是很好用
作者:
wanson (望生)
2015-01-18 16:13:00請問可以提供確切的code給我參考嗎? 謝謝其實我想要問的就是sas 的 %do %to macro在R如何寫這樣
作者:
andrew43 (討厭有好心推文後刪文者)
2015-01-18 20:27:00改用 t[ ,1] t[ ,2] t[ ,3] t[ ,4] 來提取變數。如果要用for loop,就是生出(1,2)和(3,4)就解決了。
作者:
wanson (望生)
2015-01-18 21:32:00上面說的只要變項換個順序就不能達成 我想要的是universal的code
作者:
andrew43 (討厭有好心推文後刪文者)
2015-01-18 21:38:00那你可以思考可以universal的條件是基於什麼?在for loop裡,總是要指定一個vector變數。例如你想把for變數改成其它東西,那它會是什麼?請你說說看,這樣大家比較容易想出你真正有用的答案。
作者:
wanson (望生)
2015-01-18 22:13:00就是conditional 特定的variable prefix +number這個prefix 在這邊就是x,y 後面變換的就是i = 1 to n
作者:
andrew43 (討厭有好心推文後刪文者)
2015-01-18 22:18:00那可能沒有直接解。要先用for生出x1,x2.. y1,y2字串應該沒有像SAS般的做法。如果要R的風格,可能不是一個data frame而是一個list。每個list是一個x和一個y。這樣就有現成的function了。每個list之下一直說錯... list之下是數個data frame或matrix以分別表示(x1,y1), (x2,y2)。
作者: aaron77217 (慎) 2015-01-18 22:44:00
for(i in 1:2){plot(t[,paste('x',i,sep="")],t[,paste('y',i,sep="")])}不知道這是不是你想要的方式
作者:
andrew43 (討厭有好心推文後刪文者)
2015-01-18 22:57:00看起來不錯。意思是t[,"x1"]來提取t$x1。建議中間插個 dev.new() 不然前圖會被後圖取代。
作者:
wanson (望生)
2015-01-18 23:27:00請問dev.new() 插入哪呢 我放在會後面似乎無法成功另外我自行延伸把plot 帶入一些常見的指令像是corfor(i in 1:2){ cor(paste('x',i,sep=""),paste('y',i,sep"")]) }卻無法成功 請問這個問題是?最後一個問題是 像一些model 給予分析 都給予最簡易數值我剛嘗試用上面的語句再寫成ci= cor(t$xi,t$yi)for(i in 1:2){paste('c',i,sep="")<-cor(t[,paste('x',i,sep="")],t[,paste('y',i,sep="")])結果失敗 請問一下有無方式可以成功呢 ? 謝謝發現dev.new放在最前面就成功了 謝謝告知這個指令
作者:
andrew43 (討厭有好心推文後刪文者)
2015-01-18 23:39:00cor()裡要塞二個vector。像是 cor(t[,"x1"], t[,"y1"])而你塞給cor()的只是字串,並不是實際數值。猜想你沒有完全明白aaron77217板友提供的源碼。paste('x',i,sep="") 會回傳字串,而t[,paste('x',i,sep="")] 會回傳一個向量。抱歉,沒看到後來你也試過了。問題可能是你cor()只輸入二個點。二個點求相關係數幹嘛?或是不只二個點,請再提供更多訊息。
作者:
wanson (望生)
2015-01-19 00:07:00我後來發現兩個點的確有問題 我就新增多個數值
作者: aaron77217 (慎) 2015-01-19 00:07:00
for(i in 1:2){
作者:
wanson (望生)
2015-01-19 00:08:00並且我是確定過當cor(t$x1,t$y1) 可以得到相關係數才進行的 抱歉打斷推文
作者: aaron77217 (慎) 2015-01-19 00:08:00
assign(paste("c",i,sep=""),cor(t[,paste("x",i,sep="")],t[,paste("y",i,sep="")]))}@@"沒關西 試試吧 這樣就可以同步產生c1 c2了
作者:
wanson (望生)
2015-01-19 00:10:00感謝 測試成功 謝謝大家的教導 sas跟r的寫法在這個部份差異有點大 在sas原本簡單macro 但在r這邊就思維不一樣