我是 R 的新用戶,我正在嘗試基于回圈將 2 個向量的元素相乘,并從中創建此資料集的 n 個新向量
A = matrix(data= c(1, 2,3, 4, 5, 6, 7, 8, 9), nrow= 3, ncol= 3)
B = matrix(data= c(6, 1, 3), nrow= 1, ncol = 3)
C = matrix(data= c(5, 2, 2), nrow = 3, ncol= 1)
b.1 = matrix(data= NA, nrow = 1, ncol =ncol(A))
for (i in 1:ncol(B))
b.1[1, i] =((A[,i]%*%C[,ncol(C)]/A[nrow(A),i] ))
c.1 <- matrix(data = NA , nrow = nrow(C) , 1)
for (j in 1: nrow(C))
c.1[j, 1] = (A[j,]%*%B[nrow(B),]/A[j,ncol(A)])
b.2 <-matrix(data=NA, nrow= 1, ncol= ncol(A))
for (i in 1:ncol(A))
b.2[1, i] = ((A[,i]%*%c.1[,ncol(c.1)]/A[nrow(A),i] ))
c.2 <- matrix(data= NA, nrow = nrow(C), ncol= 1)
for (j in 1: nrow(C))
c.2[j,1] = (A[j,]%*%b.1[nrow(b.1),]/A[j,ncol(A)])
在這部分之前,代碼有效,但我不能使用這個雙回圈,有人知道為什么嗎?提前致謝
##c.x y b.x
for x in 3:10{
b.[x] <-matrix(data=NA, nrow= 1, ncol= ncol(A))
for (i in 1:ncol(A))
b.[x][1, i] = ((A[,i]%*%c.[x-1][,ncol(c.1)]/A[nrow(A),i] ))
c.[x] <- matrix(data= NA, nrow = nrow(C), ncol= 1)
for (j in 1: nrow(C))
c.[x][j,1] = (A[j,]%*%b.[x-1][nrow(b.[x-1]),]/A[j,ncol(A)])
uj5u.com熱心網友回復:
您的確切問題有點復雜,因此我將進行簡化,以便您了解什么不起作用,以及如何使特定代碼起作用。
##c.x y b.x
for(x in 3:10){
b.[x] <-matrix(data=NA, nrow= 1, ncol= ncol(A))
}
# Error: object 'b.' not found
為什么b.找不到?你沒有指定它。在 R 中,b.1 和 b.2 不是同一物件的子集,它們是完全獨立的物件。
要在回圈中為新物件指定一個名稱,您可以使用以下方法:
for(x in 3:10){
assign(paste0("b.",x), matrix(data=NA, nrow= 1, ncol= ncol(A)) )
}
所以現在我們已經創建了名為b.3, b.4, b.5, ..., 的物件b.10,但您仍然無法b.[x]在回圈內進行簡單呼叫,因為這似乎是一個名為的物件b.和該物件中的第 x 個元素,這不是你想做什么。
您必須get()使用物件(現在物件是在最后一步創建的):
for(x in 3:10){
temp<-get(paste0("b.",x))
print(temp)
}
[,1] [,2] [,3]
[1,] NA NA NA
[,1] [,2] [,3]
[1,] NA NA NA
[,1] [,2] [,3]
[1,] NA NA NA
[,1] [,2] [,3]
[1,] NA NA NA
[,1] [,2] [,3]
[1,] NA NA NA
[,1] [,2] [,3]
[1,] NA NA NA
[,1] [,2] [,3]
[1,] NA NA NA
[,1] [,2] [,3]
[1,] NA NA NA
一個愚蠢的例子,添加到列,然后在嵌套的 for 回圈中迭代地添加資料框:
for(x in 3:10){
assign(paste0("b.",x), matrix(data=NA, nrow= 1, ncol= ncol(A)) )
temp<-get(paste0("b.",x))
for(i in 1:ncol(A)){
temp[1, i]<-paste("whatever you want ",i)
}
assign(paste0("b.",x),temp)
}
現在讓我們看看其中一個資料幀b.4(盡管使用此代碼,每個資料幀都是相同的):
b.4
[,1] [,2] [,3]
[1,] "whatever you want 1" "whatever you want 2" "whatever you want 3"
因此,您不能.像在其他語言中那樣簡單地添加到物件中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347915.html
