这是我希望在R中实现的通用算法:
if (x[i]>y[i]) x[i] = y[i]
x
和y
当然是矢量。这个问题看起来像循环是解决方案。
答案 0 :(得分:8)
有几种可能性。首先使用ifelse函数(因为if(){} else {} constuct不适用于向量):
x <- ifelse( x > y, y, x)
或使用逻辑索引:
x[ x>y ] <- y[ x>y ]
这两个假设x和y的长度相同,并且隐式地比较和分配元素,因此不需要索引
答案 1 :(得分:2)
好,DWin告诉你为什么你绝对不需要在R中循环。但显然你不想做你所要求的,或者你的评论没有任何意义。
如果您想选择要更改的内容,只需在DWin解决方案中添加额外的逻辑向量,例如:
x <- 1:10
y <- 10:1
# say I want to change every second index
id <- seq.int(length(x))%%2
ifelse(x>y & id,y,x)
只要id:
,你就可以做你想做的事答案 2 :(得分:1)
最短的回答肯定是
x <- pmax(x,y)