Ik ben nieuw bij R. Ik wil een lege matrix invullen met de resultaten van mijn for
Loop 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 matrix
is 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 cbind
aan 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.