我目前有一個雙重循環,根據給定數量的行和列將列表中的對象打印到網格中。我的問題是,我想爲用戶提供一個「byrow」選項,以便他們可以決定先填充整個列或行。到目前爲止,我得到它的唯一方法是將我的代碼加倍並更改循環順序,這看起來非常低效。下面是我的代碼的簡化版本。如何反轉雙循環?
如果需要更多信息,請讓我知道。任何幫助或指導,非常感謝。
plot (x = 1:4 , y = 1:4 , type = "n")
w <- list ("a" , "b" , "c" , "d" ,"e" , "f")
nrow <- 3
ncol <- 2
if (length(w) > nrow * ncol) warning("NOT ENOUGH rows/columns")
for (i in 1:nrow) for (j in 1:ncol){
if(!length(w)) break
text(i,j , w[[1]])
w <- w[-1]
}
編輯:
道歉我應該這更明確強調。上面的代碼是我的實際代碼的高度簡化版本。主要列表是列表的列表,我使用的功能而不是文本沒有矢量化,因此matrix
將不適用於我的具體情況。
翻翻提供的答案,雖然我已經成功地使用他人已經使用rev
和expand.grid
功能來創建以下文件:
plot (x = 1:4 , y = 1:4 , type = "n")
w <- list ("a" , "b" , "c" , "d" ,"e")
nrow <- 3
ncol <- 2
byrow <- T
if (length(w) > nrow * ncol) warning("NOT ENOUGH rows/columns")
grid <- expand.grid(1:nrow , 1:ncol)
if (!byrow) grid <- rev(grid)
grid <- grid[1:length(w),]
mapply(text , grid[,1] ,grid[,2] , w)
我仍然有興趣,看看是否有這樣做的更好的辦法儘管如此。
我可能會錯過一些東西,但是你是否正在嘗試編寫一個低效率的矩陣函數? – Roland
「*我仍然有興趣看看是否還有更好的方法來做這件事。*」爲了有效地工作,我認爲我們需要看到一個更接近實際數據的例子。也許在一個新問題上,不要在這裏過多地移動球門柱。 – Gregor