当前位置: 首页 > 知识库问答 >
问题:

带库的R分数(质量)

林意蕴
2023-03-14
y = c("-1", "1", "1", ...)
    y = c("-1/2", "1", "1", ...)
    y = as.numeric(y);
 sapply(y , function(x) {

     eval(parse(text=x));
  });

共有1个答案

骆雅昶
2023-03-14

eval(parse(text))非常慢--正如您所知道的,您可以编写一个更快的函数:

y = c("-1/2", "1", "1", "1/2")
fixnums <- function(x){
  temp <- as.numeric(x)
  temp[is.na(temp)] <- lapply(strsplit(x[is.na(temp)], "/"), function(x) as.numeric(x[1])/as.numeric(x[2]))
  unlist(temp)
}
fixnums(y)

@Davidarenburg在下面的评论中建议了一个更快的版本,避免了lapply:

davidfixnums <- function(x){
  temp <- as.numeric(x)
  temp2 <- as.numeric(unlist(strsplit(y[is.na(temp)], "/", fixed = TRUE)))
  temp[is.na(temp)] <- temp2[c(T, F)]/temp2[c(F, T)]
  temp
}

一些基准,使用@Akrun和@Davidarenburgs建议:

library(microbenchmark)
set.seed(1234)
y <- sample(c("-1/2", "1", "1", "1/2"), 10000, replace = TRUE)

akrunfixnums <- function(y){
  x1 <- as.numeric(y)
  x1[is.na(x1)] <- vapply(y[is.na(x1)], function(x) 
    eval(parse(text=x)), numeric(1))
  x1
}

microbenchmark(fixnums(y), davidfixnums(y), akrunfixnums(y))

Unit: milliseconds
            expr        min         lq       mean     median        uq       max neval cld
      fixnums(y)  22.643745  23.157345  25.326465  23.435554  23.98544 154.16316   100  b 
 davidfixnums(y)   6.676234   6.778378   6.957626   6.824459   6.93025  10.12763   100 a  
 akrunfixnums(y) 845.404840 858.031737 869.886625 865.255363 875.54351 960.86497   100   c
 类似资料:
  • 我尝试在本地运行此存储库 我安装了git,但当我运行此命令时: 编辑运行另一个命令时收到此错误:

  • 验证静态库是.o文件的合集 相关工具介绍 clang命令部分参数描述 -x: 指定编译文件语言类型 -target: 指定指令集(-target arm64-apple-ios14.3 真机) -g: 生成调试信息 -c: 生成目标文件,只运行preprocess,compile,assemble,不链接 -o: 输出文件 -isysroot: 使用的SDK路径 1. -I<

  • 说明 整理自“3Blue1Brown - 微积分的本质系列视频” 本系列的视频目的在于帮助你建立关于微积分的基本直觉 目录 微积分回忆 求导公式 乘积法则 链式法则 隐函数求导 积分、微分的互逆关系 泰勒级数 ... 微积分的三个中心思想: 积分 微分 积分与微分(导数)的互逆 (几位)微积分之父 发现微积分:巴罗(Barrow)、牛顿(Newton)、莱布尼茨(Leibniz) 给出严格定义:柯

  • 我有两个不同长度的向量,每个向量包含0到50之间的数字。有些数字在向量中不包含,其他数字可能出现多次。 我想画一条线,显示每个数字在每个向量中包含的频率,即数字的频率。 如果我将中断设置为每个可能的数字之间,我可以绘制显示频率的直方图: 我知道有一个经验累积分布函数(),它会形成一个S形;但我想要的是一个非累积的经验分布函数,它将导致类似阶梯形钟形曲线的结果,类似于直方图的轮廓。 我能得到的最接近

  • 主要内容:RMySQL包,将R连接到MySql,查询表,使用过滤子句查询,更新表中的行记录,将数据插入到表中,在MySql中创建表,在MySql中删除表关系数据库系统中的数据是以规范化格式存储的。 所以,为了进行统计计算,我们需要非常高级和复杂的SQL查询。但是R可以很容易地连接到许多关系数据库,如:MySQL,Oracle,Sql Server等,并将它们作为数据帧提取。 当从数据库中读取数据到R环境中可用以后,它就成为一个正常的R数据集,可以使用所有强大的软件包和函数进行操作或分析。 在本教

  • 我写了一个程序,将数字分解为它的质因数,然后将它们存储在一个向量中,最后询问是否通过将它们相乘来验证结果。 它的工作方式是这样的:要求一个数字(代码中的),然后将其除以2及以上。 如果它找到一个模(当mod时)为零的数字(代码中的 ),则将该除数存储到一个向量中,并将其除以 ,然后将其存储到 中,然后将除数重置为1(而 循环中的最后一条语句将其递增为2)。如果没有找到这样的数字, 将增加,直到它大