计算R中列表或向量中的偶数

计算R中列表或向量中的偶数,r,R,我试图通过循环打印列表中的偶数,但没有得到任何结果,我尝试了: 将数字分配到: a<-314159265354275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264

我试图通过循环打印列表中的偶数,但没有得到任何结果,我尝试了: 将数字分配到:

a<-31415926535427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533"
然后我试着设置计数器:

counter <- 0
for (stev in a.cn) {
    if (sten %% 2 == 0) {
        counter <- counter + 1
    }
}

计数器如果您对单位偶数感兴趣,可以使用
stringr
库:

str_count(a, "0|2|4|6|8")

[1] 186
如果您对前50个数字感兴趣:

str_count(str_sub(a, 1, 50), "0|2|4|6|8")

[1] 22

使用与您正在使用的类似的工作流,您可以使用此来检查前50个数字。这使用了所有相同的逻辑,但将
fixed=TRUE
添加到
strsplit()
以实现小幅度的速度提升,并充分利用了矢量化

sum(as.integer(strsplit(a, "", fixed = TRUE)[[1]])[1:50] %% 2 == 0)
[1] 22

我添加了一个新的解决方案,它只使用基本R函数(
gregexpr
),而且似乎效率最高:

length(gregexpr(“0 | 2 | 4 | 6 | 8”,substr(a,1,50))[[1]]
OP评论建议应为其提供适当的功能:

count\u str count\u str(列表(a)、c(“0”、“2”、“4”、“6”、“8”),第一个=50)
[1] 22
>计数(a、c(“0”、“2”、“4”、“6”、“8”),第一个=0)
计数错误(a、c(“0”、“2”、“4”、“6”、“8”),第一个=0):
is.null(first)| |(is.numeric(first)&&(first>0))不是真的
>微基准::微基准(
+基={length(gregexpr(“0 | 2 | 4 | 6 | 8”,substr(a,1,50))[[1]])},
+stringi={stri_count(stri_sub(a,1,50),regex=“0 | 2 | 4 | 6 | 8”),
+stringr={sum(stru count(stru sub(a,1,50),“0 | 2 | 4 | 6 | 8”)},
+次数=10000次)
单位:微秒
expr最小lq平均uq最大neval
基数10.665 12.2195 15.16829 12.8520 13.636 520.857 10000
stringi 11.858 12.6705 14.66833 13.5395 14.367 312.927 10000
纵梁13.517 14.3300 16.49280 15.2950 16.030 218.752 10000

我试过了,但没用,例如:
bbn=“31415926535897932384626433832795028841971693993751058209749445922307816406286208986280348253421170679814808651328230664709384460955058231725359408128111745028102701938521559966229489549”striu计数(striu sub,1100),regex=“0 | 2 | 124; 4 1248)将把你的代码去掉,尝试删除三个2,输出将为50!您知道字符串长度超过100个字符,当您删除某个字符串时,位置101处的数字将移动到位置100。这个数字可能是偶数。请尝试其他答案。当然,如果删除的数字在位置100之前,我假设是在您的情况下。我不知道您删除的位置是左侧还是右侧。所以在右边的位置100将不会对左边的位置产生影响,正如我们已经讨论过的。请记住,当删除位置100左侧的数字时,新数字可能是偶数或奇数。
counter <- 0
for (stev in a.cn) {
    if (sten %% 2 == 0) {
        counter <- counter + 1
    }
}
str_count(a, "0|2|4|6|8")

[1] 186
str_count(str_sub(a, 1, 50), "0|2|4|6|8")

[1] 22
sum(as.integer(strsplit(a, "", fixed = TRUE)[[1]])[1:50] %% 2 == 0)
[1] 22