Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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中反转数字_R - Fatal编程技术网

如何在R中反转数字

如何在R中反转数字,r,R,我想写一个函数来反转任何数字的顺序。这是我的东西,但它不起作用。请帮帮我 n=123 rev_number=function(n){ m=strsplit(as.character(n),"") if (m==rev(m)) print("reversed number") } 所需的输出是n=321我觉得整数应该留在整数世界,而不是进入字符串操作世界。在R中似乎没有用于此类任务的内置函数,因此我们可以创建一个,例如使用Rcpp包。这里有一个例子 library(Rcpp) cppFunc

我想写一个函数来反转任何数字的顺序。这是我的东西,但它不起作用。请帮帮我

n=123
rev_number=function(n){
 m=strsplit(as.character(n),"")
 if (m==rev(m)) print("reversed number")
}

所需的输出是
n=321

我觉得整数应该留在整数世界,而不是进入字符串操作世界。在R中似乎没有用于此类任务的内置函数,因此我们可以创建一个,例如使用Rcpp包。这里有一个例子

library(Rcpp)
cppFunction('int Reverse_CPP(int x) {
  int reverse = 0;
  while(x != 0) {
        int remainder = x%10;
        reverse = reverse*10 + remainder;
        x/= 10;
    }
  return reverse ; 
}')

Reverse_CPP(1234)
# [1] 4321

这是一个矢量化的版本

cppFunction('IntegerVector Reverse_CPP2(IntegerVector x) {
  int n = x.size();
  IntegerVector out(n);
  IntegerVector xx = clone(x); // Will need this if you don"t want to modify x in place

  for (int i = 0; i < n; ++i){
    int reverse = 0;
    while(xx[i] != 0) {
       int remainder = xx[i]%10;
       reverse = reverse*10 + remainder;
       xx[i]/= 10;
    }
    out[i] = reverse;
   }

   return out;

}')

Reverse_CPP2(c(12345, 21331, 4324234, 4243))
# [1]   54321   13312 4324234    3424

对于整数,可以使用
n>9

reverse_int <- function(n) {
  t1 <- floor(log10(n))
  t2 <- 0
  for (i in t1:1) t2 <- t2 + floor(n/10^i) * 10^(t1-i)
  return(n*10^t1 - 99*t2)
}
reverse_int(678754)
#[1] 457876

reverse\u int一种R函数,用于根据连续幂为10的整数除法对数字进行反转。这是在一个与回文数字相关的学校项目中提出的

Reverse_number <- function(x){ 
  n <- trunc(log10(x)) # now many powers of 10 are we dealing with 
  x.rem <- x # the remaining numbers to be reversed 
  x.out <- 0 # stores the output 
  for(i in n:0){
  x.out <- x.out + (x.rem %/% 10^i)*10^(n-i) # multiply and add 
  x.rem <- x.rem - (x.rem %/% 10^i)*10^i # multiply and subtract 
  } 
return(x.out) 
}

>代码> ReaveSo数字,你能考虑发布样本输入和期望的输出吗?反转不仅仅是为了改变顺序吗?虽然这可能不是最好的方法,但我猜您正在尝试粘贴(rev(strsplit(as.character(n),“”)[[1]],collapse=”“)
。尽管如前所述,最好提供一个可复制的示例和所需的输出。谢谢大家。我刚刚用输入和期望的输出更新了我的问题。对于这样的问题,我想首先要看的地方是社区-所以,你可以使用
ff=function(x)x*10^floor(log10(x))-99*sum(floor(x*10^(-seq_len(log10(x)))*10^(floor(log10(x))-seq_len(floor)(log10(x)))
<代码>ff(4568742)。您可以存储一些计算以避免重复它们。只需在第二个函数中做一个注释-如果输入“x”确实是“整数”(我假设在传递给函数之前会自动强制输入“double”),那么原始的“x”将被修改。@alexis_laz我不确定您的意思。如何才能反转
12.3
?或者在这种情况下,您的
ff
工作,而这不会工作?同样
Reverse\u CPP2(例如,double(c(12,24))
也可以正常工作。而
Reverse\u CPP2(as.double(12.3))
确实将转换为整数,而
ff(12.3)
将返回其他一些结果。不管怎样,我都不明白你的评论。我指的是“typeof”;参见-例如-
x1=12;反向_CPP2(x1);x1;x2=12L;反向_CPP2(x2);x2
@alexis_laz哇,我不知道那里发生了什么。你能指出一些关于那件事的文件吗?那么基本上说函数在适当的位置修改了x?我想“编写R扩展”会警告修改输入。在这种情况下,我相信,“Rcpp”会在输入的“typeof”与预期不匹配时自动使用(?)排序的
强制执行器
(它返回一个不同的对象),而在匹配时,会操纵指向R对象的同一指针。(我想在这种情况下,只需将
x[I]
保存到
tmp
即可解决此问题)。
Reverse_number <- function(x){ 
  n <- trunc(log10(x)) # now many powers of 10 are we dealing with 
  x.rem <- x # the remaining numbers to be reversed 
  x.out <- 0 # stores the output 
  for(i in n:0){
  x.out <- x.out + (x.rem %/% 10^i)*10^(n-i) # multiply and add 
  x.rem <- x.rem - (x.rem %/% 10^i)*10^i # multiply and subtract 
  } 
return(x.out) 
}