C++;or Rcpp:不带循环的两个向量的比较 我是C++和Rcpp的新手,我想知道如何比较两个不同向量的每个元素,没有一次循环。

C++;or Rcpp:不带循环的两个向量的比较 我是C++和Rcpp的新手,我想知道如何比较两个不同向量的每个元素,没有一次循环。,c++,r,rcpp,C++,R,Rcpp,我的目标是通过引用其他向量来更改v1的元素` 当前代码为 v1 = {6,7,8,9,10} v2 = {2,4,6,8,10} v3 = {a,b,a,b,c} v4 = {0,0,0,0,0} v5 = {a,b,c} v6 = {1,2,3} for (i in 1:5){ if (v1[i] > v2[i]){ for (j in 1:3){ if (v5[j] == v3[i]){ v4[i] = v2[i] + v6[j]

我的目标是通过引用其他向量来更改
v1
的元素`

当前代码为

v1 = {6,7,8,9,10}
v2 = {2,4,6,8,10}
v3 = {a,b,a,b,c}
v4 = {0,0,0,0,0}
v5 = {a,b,c}
v6 = {1,2,3}

for (i in 1:5){
  if (v1[i] > v2[i]){
    for (j in 1:3){
      if (v5[j] == v3[i]){
        v4[i] = v2[i] + v6[j]
          if (v1[i] > v4[i]){
            v1[i] = v4[i]
          }
      }
    }
  }
}  
结果应该是

v1 = {3,6,7,9,10}
事实上,
v1、v2、v3、v4
v5、v6
是R中不同的
dataframe
。将
v1
的每个元素与
v2
进行比较。如果
v1
中的
i
元素大于
v2
中的
i
元素,则
v1
元素通过相应的
v3
v5
成为
i
元素和
v6
元素的总和。然后将新估计值
v4[i]
v1[i]
进行比较


我在
v1~v5
v5~v6
中有大量案例。在这种情况下,使用
循环
需要很长时间。是否可以在没有循环的情况下比较不同的向量?或者如何估计和引用另一个向量的元素?

< p>我不认为需要使用Rcpp或C++。按照我理解您的需求的方式,您正在尝试操纵两组等长向量。对于“等长向量集”,通常使用
data.frame
或其扩展名之一。这里我使用的是base R、
data.table
dplyr
以及
tibble
。自己看看你喜欢哪种语法。一般来说,
data.table
对于大型数据集来说可能更快

设置数据:

v11:32a3
#>2:7 6 a 7
#>3:64B6
#>4:98B10
#>5:10 10 c 13
dplyr

SuppressPackageStatupMessages(库(dplyr))
t1%
变异(v4=v2+v6)%>%
变异(v1=情况_,当(
v1>v2&v1>v4~v4,
真~v1
))
#>#tibble:5 x 5
#>v1 v2 v3 v6 v4
#>       
#>123A2A13
#>2 6 4 b 2 6
#>37617
#>498B210
#>510C313
由(v0.2.1)于2019年4月19日创建

总的想法总是一样的:

  • 连接字符列上的两个表
  • 创建新列
    v4
    ,作为
    v2
    v6
  • v1
    更新为
    v4
    的值,其中
    v1>v2
    v1>v4

注意,基r和<代码>数据.table <代码>不保存顺序,因此将输出放在一个附加列中更有意义。

这里,我不需要使用Rcpp或C++。按照我理解您的需求的方式,您正在尝试操纵两组等长向量。对于“等长向量集”,通常使用
data.frame
或其扩展名之一。这里我使用的是base R、
data.table
dplyr
以及
tibble
。自己看看你喜欢哪种语法。一般来说,
data.table
对于大型数据集来说可能更快

设置数据:

v11:32a3
#>2:7 6 a 7
#>3:64B6
#>4:98B10
#>5:10 10 c 13
dplyr

SuppressPackageStatupMessages(库(dplyr))
t1%
变异(v4=v2+v6)%>%
变异(v1=情况_,当(
v1>v2&v1>v4~v4,
真~v1
))
#>#tibble:5 x 5
#>v1 v2 v3 v6 v4
#>       
#>123A2A13
#>2 6 4 b 2 6
#>37617
#>498B210
#>510C313
由(v0.2.1)于2019年4月19日创建

总的想法总是一样的:

  • 连接字符列上的两个表
  • 创建新列
    v4
    ,作为
    v2
    v6
  • v1
    更新为
    v4
    的值,其中
    v1>v2
    v1>v4

请注意,base R和
data.table
不保留顺序,因此将输出放在另一列中更有意义。

您能详细说明您的要求吗?你在比较什么?你对结果做了什么?举个例子,有预期的结果总是有助于别人看到你在做什么。这是一个真正的问题还是一个家庭作业?如果是家庭作业,那么参数是什么?递归可以用来避免“循环”,但不清楚为什么要避免循环。您的代码示例不会产生任何输出。如果前两个向量相等,那么您的目标似乎是永远不执行v1和v3之间的比较?你想返回一个指示v2是与v1等价的第一个向量吗?对于我问题中的混淆,我真的很抱歉。我在当前问题中添加了更多信息和目标。我是社会科学的研究生,这是我研究的一个问题。我试图估算不同空间区域之间的旅行时间。但是,我不知道如何避免Rcpp或C++中的循环。在R中,它可以很容易地进行esimate,但由于数据量大,我尝试时需要很长时间。您能扩展您的需求吗?你在比较什么?你对结果做了什么?举个例子,有预期的结果总是有助于别人看到你在做什么。这是一个真正的问题还是一个家庭作业?如果是家庭作业,那么参数是什么?递归可以用来避免“循环”,但不清楚为什么要避免循环。您的代码示例不会产生任何输出。如果前两个向量相等,那么您的目标似乎是永远不执行v1和v3之间的比较?是否要返回一个指示符,说明v2是与v1等价的第一个向量?对于我的示例中出现的混淆,我感到非常抱歉