2016-05-27 81 views
-2

爲什麼這行代碼工作正常,如何解決錯誤:(標)邏輯標太長

phap  = mymont$QMEAN_ATM_RSHORT_PY > phap.min | iint.photo == 0 
phap.lparconow  = mean(mymont$QMEAN_PAR_L_CO  [phap]) 

雖然這將引發一個錯誤?

phap.lparconow  = rowMeans(mymont$QMEAN_PAR_L_CO  [,phap]) 

我已閱讀其他類似的問題,但它們相當複雜,我想知道更常見的方法來解決此問題。 感謝

回答

0

您的代碼看起來非常可疑:

mymont$QMEAN_PAR_L_CO[,phap] 

如果mymont是數據幀,然後mymont$QMEAN_PAR_L_CO是一個向量,那麼如何通過[, phap]子集一個向量?你的意思是mymont[phap, "QMEAN_PAR_L_CO"]

此外,當您使用rowMeans(),rowSums(),colMeans()colSums時,您必須注意子集時可能發生的尺寸損失。這些函數像維度對象一樣採用矩陣。 R FAQ: 7.5 Why do my matrices lose dimensions?已經很好地解決了這個問題。關於堆棧溢出還有很多類似的問題。爲了健壯性,請在[ , ]內添加drop = FALSE

+0

感謝您的輸入,QMEAN_PAR_L_CO是一個34x34的矩陣,這不是我的代碼,它有點難以分辨正在做什麼。 mymont是一個hdf5對象,所以是的,它可以被認爲是一個數據幀,它包含矩陣和向量,但在這種情況下,它是一個矩陣,而phap也是一個矩陣。 –

+0

其實你的例子幫助我,因爲我能夠運行命令,不幸的是後來我遇到了與此操作的結果有關的問題,我不認爲有可能輕鬆地製作可重複的例子,因爲這不是我的代碼,我不明白髮生了什麼事。無論如何,謝謝 –

+0

是的我添加了drop = FALSE,並且還改變了索引的位置[phap,drop = FALSE],但我不知道這是否是正確的解決方案 –