Hoe maak je een lege matrix in r?

Ik ben nieuw bij R. Ik wil een lege matrix invullen met de resultaten van mijn forLoop met cbind. Mijn vraag is, hoe kan ik de NAS in de eerste kolom van mijn matrix elimineren. Ik neem mijn code hieronder op:

output<-matrix(,15,) ##generate an empty matrix with 15 rows, the first column already filled with NAs, is there any way to leave the first column empty?
for(`enter code here`){
  normF<-`enter code here`
  output<-cbind(output,normF)
}

De uitvoer is de matrix die ik verwachtte. Het enige probleem is dat de eerste kolom is gevuld met NAS. Hoe kan ik die NAS verwijderen?


Antwoord 1, Autoriteit 100%

De standaardinstelling voor matrixis om 1 kolom te hebben. Om expliciet 0 kolommen te hebben, moet u

schrijven

matrix(, nrow = 15, ncol = 0)

Een betere manier zou zijn om de hele matrix te prefelen en vul het vervolgens in

mat <- matrix(, nrow = 15, ncol = n.columns)
for(column in 1:n.columns){
  mat[, column] <- vector
}

Antwoord 2, Autoriteit 19%

Als u het aantal kolommen van tevoren niet kent, voegt u elke kolom toe aan een lijst en cbindaan het einde.

List <- list()
for(i in 1:n)
{
    normF <- #something
    List[[i]] <- normF
}
Matrix = do.call(cbind, List)

Antwoord 3, Autoriteit 7%

Ik zou voorzichtig zijn als het afwijzen van iets als een slecht idee omdat het traag is. Als het deel uitmaakt van de code die niet veel tijd kost om uit te voeren, is de traagheid niet relevant. Ik heb zojuist de volgende code gebruikt:

for (ic in 1:(dim(centroid)[2]))
{
cluster[[ic]]=matrix(,nrow=2,ncol=0)
}
# code to identify cluster=pindex[ip] to which to add the point
if(pdist[ip]>-1)
{
cluster[[pindex[ip]]]=cbind(cluster[[pindex[ip]]],points[,ip])
}

voor een probleem dat in minder dan 1 seconde liep.


Antwoord 4

Om de eerste kolom van NAS te verwijderen, kunt u het doen met negatieve indexering (die indices uit de R-dataset verwijdert).
Bijvoorbeeld:

output = matrix(1:6, 2, 3) # gives you a 2 x 3 matrix filled with the numbers 1 to 6
# output = 
#           [,1] [,2] [,3]
#     [1,]    1    3    5
#     [2,]    2    4    6
output = output[,-1] # this removes column 1 for all rows
# output = 
#           [,1] [,2]
#     [1,]    3    5
#     [2,]    4    6

, zodat u gewoon output = output[,-1]NA DE VOOR LOOP in uw originele code toevoegen.

Other episodes