首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R slickR包用自定义文本替换dosts

R slickR包用自定义文本替换dosts
EN

Stack Overflow用户
提问于 2022-08-11 14:29:50
回答 1查看 30关注 0票数 1

我为R https://cran.r-project.org/web/packages/slickR/vignettes/basics.html找到了很酷的旋转木马包

下面的代码将创建旋转木马,其中点被数字替换。

代码语言:javascript
复制
cP1 <- htmlwidgets::JS("function(slick,index) {
                            return '<a>'+(index+1)+'</a>';
                       }")

opts_dot_number <- settings(
  initialSlide = 0,
  slidesToShow = 5,
  slidesToScroll = 100,
  focusOnSelect = TRUE,
  dots = TRUE,
  customPaging = cP1
)

slick_dots <- slickR(
  obj = nba_player_logo$uri,
  height = 100,
  width = "95%"
)

slick_dots + opts_dot_number

我的问题是,您将如何用自定义文本替换数字?当前代码生成从1到11的数字,但是否可以用

“一”“二”“三”等

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-12 08:54:29

您需要的是添加一个函数,将数字翻译成单词。网上有很多这样的东西,one can be found in this SO thread

然后,就像将这个函数添加到自定义JS中一样简单:

代码语言:javascript
复制
cP1 <- htmlwidgets::JS("
function(slick,index) {
   const numToWordObj = {
     0: 'zero',
     1: 'one',
     2: 'two',
     3: 'three',
     4: 'four',
     5: 'five',
     6: 'six',
     7: 'seven',
     8: 'eight',
     9: 'nine',
     10: 'ten',
     11: 'eleven',
     12: 'twelve',
     13: 'thirteen',
     14: 'fourteen',
     15: 'fifteen',
     16: 'sixteen',
     17: 'seventeen',
     18: 'eighteen',
     19: 'nineteen',
     20: 'twenty',
     30: 'thirty',
     40: 'forty',
     50: 'fifty',
     60: 'sixty',
     70: 'seventy',
     80: 'eighty',
     90: 'ninety'
   };
   const placement = {
     100: ' hundred',
     1000: ' thousand',
     1000000: ' million',
     1000000000000: ' trillion'
   };
   
   const numToWord = (num) => {
     const limiter = (val) => num < val;
     const limiterIndex = Object.keys(placement).findIndex(limiter);
     const limiterKey = Object.keys(placement)[limiterIndex];
     const limiterVal = Object.values(placement)[limiterIndex - 1];
     const limiterMod = Object.keys(placement)[limiterIndex - 1];
   
     if (numToWordObj[num]) {
       return numToWordObj[num];
     }
     if (num < 100) {
       let whole = Math.floor(num / 10) * 10;
       let part = num % 10;
       return numToWordObj[whole] + ' ' + numToWordObj[part];
     }
   
     if (num < limiterKey) {
   
       let whole = Math.floor(num / limiterMod);
       let part = num % limiterMod;
       if (part === 0) {
         return numToWord(whole) + limiterVal;
       } else {
         return numToWord(whole) + limiterVal + ' and ' + numToWord(part);
       }
     }
   };
   return '<a>'+numToWord(index+1)+'</a>';   
}
")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73322430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档