我在R中擁有一個串列,其中包含了各層各月的葉面積值,像這樣
ls < - list(月 = c(1。 1, 2, 2, 3, 3, 4,4),
層 = c(0。 1,0, 1, 0,1。 0,1),
LA = c(runif(8)))
我想創建一個陣列,按層顯示每個月的洛杉磯快照,層0對應陣列中每個矩陣的底部,層1對應頂部。我已經創建了一個陣列
canopy < -陣列(dim = c(2。 1,4))
并試圖用一個for回圈來填充它
for (i in 1: 4) {
if (ls$month == i){>
if (/span>ls$layer == 0){
篷[2。 1,i] < - ls$LA
} else if (/span>ls$層== 1){
篷[1。 1,i] < - ls$LA
}}}
然而,這產生了一個錯誤
Error in canopy[2, 1, i]/span> < - ls$LA 。
要替換的專案數不是替換的倍數長度。
此外:警告資訊:
1。 在if (ls$month ==i) { :
該條件有長度 > 1,只有第一個元素將被使用。
2。 在if (ls$layer == 0) { 。
該條件有長度 > 1,只有第一個元素將被使用。
我怎樣才能清理這個問題呢?
uj5u.com熱心網友回復:
將資料放入一個3維的矩陣總是很棘手。 請確定這確實是你所需要的。 對于這個例子,一個標準的矩陣/資料框架可能是一個更好的解決方案。
在這個解決方案中,我回圈瀏覽月數并確定每個月的向量的索引,然后從串列的每個向量中提取這些元素。 其中一個棘手的部分是層為0或1。 在R中沒有0的索引(Python是的),因此我給layer添加了一個索引,以便在矩陣中正確放置它。
試一下:
ls < - list(月 = c(1。 1, 2, 2, 3, 3, 4,4),
層 = c(0。 1,0, 1, 0,1。 0,1),
LA = c(runif(8)))
可以< -陣列(dim = c(2。 1,4))
#Rows are layer[/span]。
#列是LA
#Matrixes are month[/span]for (i in 1。 4) {}。
月<-其中(ls$月=i)
篷[ls$層[月] 1。 ,i]/span> < -ls$LA[/span>month]
}
天幕
, , 1
[,1]
[1,]/span> 0.1941003
[2,] 0.5879553
, , 2
[,1]
[1,] 0.8284857
[2,] 0.7242819
, , 3
[,1]
[1,]/span> 0.8078793
[2,] 0.3489988
, , 4
[,1]
[1,] 0.25424950
[2,] 0.05117571
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/325736.html
標籤:
