我正在尝试将函数仅应用于符合我条件的某些行。我从其他线程中看到我应该使用“应用”功能,但我似乎无法让它工作 以下是我到目前为止的情况:
a = which(decisionMatrix[,1]>0 & decisionMatrix[,4] < decisionMatrix[,5] &
tail(ratios,1)>decisionMatrix[4])
这给了我符合条件的行数。
然后我使用:
apply(decisionMatrix[10],a,decisionMatrix[,1]/decisionMatrix[,5])
我在这里要做的是说“对于满足上述条件的每一行,取该行中的第一列并将其除以该行中的第五列,并将结果存储在该行的第10列中行“
有人能给我一些建议吗?
答案 0 :(得分:4)
请勿使用apply
。要修改就地行,只需执行以下操作:
decisionMatrix[a, 10] <- decisionMatrix[a, 1] / decisionMatrix[a, 5]
答案 1 :(得分:3)
根据Ananda的评论,您需要以下内容:
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)