Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如果满足条件,则使用mapply替换向量中的元素_R_If Statement_Vector_Replace_Apply - Fatal编程技术网

R 如果满足条件,则使用mapply替换向量中的元素

R 如果满足条件,则使用mapply替换向量中的元素,r,if-statement,vector,replace,apply,R,If Statement,Vector,Replace,Apply,如果使用快速应用函数满足条件,则尝试替换向量中的值,但在语法方面遇到困难 v1 <- c(-18,-18,-19,-20,-18,-18,-19) v2 <- c(34, 7, 8, 9, 7, 10, 30) v1这不需要循环。这就是工作: v1[v1

如果使用快速应用函数满足条件,则尝试替换向量中的值,但在语法方面遇到困难

 v1 <- c(-18,-18,-19,-20,-18,-18,-19)
 v2 <- c(34, 7,   8,   9,  7, 10, 30)

v1这不需要循环。这就是工作:


v1[v1<(-v2)]你不需要一个循环。这就是工作:


v1[v1<(-v2)]在
mapply
中,您可以将一个函数应用于多个参数。在您的情况下,函数应该包含两个变量,如:

v1 <- mapply(function(x,y) if (x < (-y)) (-y) else x, v1, v2)
v1
#[1] -18  -7  -8  -9  -7 -10 -19

mapply
中,可以将函数应用于多个参数。在您的情况下,函数应该包含两个变量,如:

v1 <- mapply(function(x,y) if (x < (-y)) (-y) else x, v1, v2)
v1
#[1] -18  -7  -8  -9  -7 -10 -19

您可以使用
for
而不是
mapply
。代码:
for(i in 1:(length(v1)){if(v1[i]<(-v2[i]))v1[i]=(v2[i])}
是的,我知道我可以写一个for循环,只是实际的数据集非常大,所以我担心速度会很慢。我认为应该有一个矢量化的方法来做,我只是不太确定它是什么。谢谢您可以使用
for
而不是
mapply
。代码:
for(i in 1:(length(v1)){if(v1[i]<(-v2[i]))v1[i]=(v2[i])}
是的,我知道我可以写一个for循环,只是实际的数据集非常大,所以我担心速度会很慢。我认为应该有一个矢量化的方法来做,我只是不太确定它是什么。谢谢
 v1 <- mapply(function(i) if(v1[i]< (-v2[i]) (-v2[i]) else v1[i], seq_along(v1))
 Error: unexpected 'else' in "v1 <- sapply(function(i) if(v1[i]< (-v2[i]) (-v2[i]) else"
v1 <- mapply(function(x,y) if (x < (-y)) (-y) else x, v1, v2)
v1
#[1] -18  -7  -8  -9  -7 -10 -19
v1[v1 < (-v2)] <- -v2[v1 < (-v2)]
v1
#[1] -18  -7  -8  -9  -7 -10 -19