R 基于另一个向量的向量值截断

R 基于另一个向量的向量值截断,r,R,以下是我希望在R中实现的通用算法: if (x[i]>y[i]) x[i] = y[i] x和y当然是航向矢量。这个问题看起来是一个循环的解决方案 有几种可能性。首先使用ifelse函数(因为if(){}else{}构造不适用于向量): xy,y,x) 或使用逻辑索引: x[ x>y ] <- y[ x>y ] x[x>y]y] 这两个假设x和y的长度相同,并且隐式地比较和赋值元素,因此不需要索引。好的,DWin已经向您展示了为什么绝对不需要R中的循环。但是显然您

以下是我希望在R中实现的通用算法:

if (x[i]>y[i]) x[i] = y[i]

x
y
当然是航向矢量。这个问题看起来是一个循环的解决方案

有几种可能性。首先使用ifelse函数(因为if(){}else{}构造不适用于向量):

xy,y,x)
或使用逻辑索引:

x[ x>y ] <- y[ x>y ]
x[x>y]y]

这两个假设x和y的长度相同,并且隐式地比较和赋值元素,因此不需要索引。好的,DWin已经向您展示了为什么绝对不需要R中的循环。但是显然您不想做您要求的事情,或者您的评论毫无意义

如果要选择要更改的,只需在DWN的解决方案中添加一个额外的逻辑向量,例如:

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)

x最短的答案肯定是

x <- pmax(x,y)

x如果这是Java,我想要一个“If-then”语句。但是,这不是Java,我是R新手。如果这是一个索引问题,您应该注意,R中的索引是基于1的,而不是Java中基于0的。但是,正如下面的答案中所指出的,您应该尽量避免R中的循环,并尽可能使用向量化函数。如果您在不同的问题中没有使用相同的主题(逐字!),这将非常有用。>x=c(1,2,3)>y=c(1,1,1)>xy,y,x)>x[1]11我需要它将x=c(1,2,3)更改为x=c(1,2,1),所以我需要改变向量的一部分,而不仅仅是交换向量。Jermoe-你需要解释你想要如何改变。在我的数学中,2>1。如果
y,也许我能说得更清楚些?我在上面展示了
x>y
给出了
[1]假-真
。因此,根据您所述的算法,我们必须将
x
的第2和第3个元素更改为
y
中的相应值。由于
y
是1s的向量,因此
x
的第2和第3个元素将替换为1s。
x
的第一个元素没有改变,但由于它已经是1,看起来
y
被替换为
x
。所以,要么你的Q包含一个错误,而通用算法不是通用算法,要么你没有把德温的答案写出来。我在测试中发现了这个错误。原谅我。我了解到R处理数据的方式与我习惯的非常不同。
x <- pmax(x,y)