1

我正在尝试仅将函数应用于满足我的条件的某些行。我从其他线程中看到我应该使用“应用”功能,但我似乎无法让它工作。
这是我到目前为止所拥有的:

a = which(decisionMatrix[,1]>0 & decisionMatrix[,4] < decisionMatrix[,5] &
          tail(ratios,1)>decisionMatrix[4])

这给了我符合我的条件的行数。

然后我使用:

apply(decisionMatrix[10],a,decisionMatrix[,1]/decisionMatrix[,5])

我在这里要做的是说“对于满足上述条件的每一行,取该行中的第一列并将其除以该行中的第五列并将结果存储在该行的第 10 列中”

有人可以给我一些建议吗?

4

2 回答 2

5

不要使用apply. 要就地修改行,只需执行以下操作:

decisionMatrix[a, 10] <- decisionMatrix[a, 1] / decisionMatrix[a, 5]
于 2013-10-14T11:11:34.880 回答
3

按照阿南达的评论,你想要这样的东西:

apply(decisionMatrix[a,], 1, function(x) x[1]/x[5])

但是,如果您希望输出与输入具有相同的维度(例如,如果您要将其添加回原始decisionMatrix对象),您可能希望将函数应用于每一行,然后将其子集化输出:

out <- apply(decisionMatrix, 1, function(x) x[1]/x[5])
out[-a] <- NA

正如@agstudy 指出的那样,后者可以通过做矢量化

out <- decisionMatrix[,1]/decisionMatrix[,5]

但是您可能有一个更复杂的操作,该解决方案无法解决。如果它适用于您的操作,则矢量化解决方案更清洁、更快。

您可能还希望将其存储回您的原始decisionMatrix文件中,这样做取决于原始文件的结构decisionMatrix

# If you want to replace an existing column 10:
decisionMatrix[,10] <- out

# If you want to column bind the result back to your original matrix:
decisionMatrix <- cbind(decisionMatrix, out)
于 2013-10-14T10:49:46.653 回答