if语句中的"参数长度为零"

 骨头少校_726 发布于 2023-02-07 08:40

我想根据数字+ W是数字*2的规则来计算我的数据.

dat="1W   16   2W   16
      1   16   2W    0
     1W   16   16    0
      4   64   64    0"     
data=read.table(text=dat,header=F)
apply(data,c(1,2),function(y){
     if(grep(pattern="W",y) ==1 )
     {  gsub("W",paste("*",2,sep=""),y)->s;
         eval(parse(text=s));
      } else 
        {y <- y }
      })

但我得到了输出:

if(grep(pattern ="W",y)== 1){:参数长度为零时出错

为什么?如果y匹配"W"则值为1,我的代码有什么问题?

1 个回答
  • 您的查询可以通过以下示例进行说明:

    grep(pattern="W","huh")
    # integer(0)
    

    没有匹配导致长度为0的向量,因此错误.而是使用grepl,即if( grepl( "W" , y ) ).

    grepl有返回值TRUEFALSE.

    作为旁注,eval( parse( "sometext" ) )不同的想法是不是一个好主意.您可以尝试使用以下不整洁的lapply语句(这将比apply您不必首先转换为矩阵更好):

    data.frame( lapply( data , function(x) 
                                    ifelse( grepl("W",x) , 
                                            as.integer( gsub("W","",x) ) * 2L , 
                                            x ) ) )
    #  V1 V2 V3 V4
    #1  2 16  4 16
    #2  1 16  4  0
    #3  2 16  1  0
    #4  3 64  3  0
    

    2023-02-07 08:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有