首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建r函数的误区

创建r函数的误区
EN

Stack Overflow用户
提问于 2015-01-27 11:31:51
回答 1查看 86关注 0票数 0

我正在尝试使用命令行创建一个函数,该命令行正在工作。我为一个数据集创建了一个标识符,如下所示

代码语言:javascript
复制
Nom Var1  Var2
N1    v11   v12
N2     .     .
N2     .     .
N3    V32   V32

我的命令是:transform(df$Nom, id=match(df$Nom, unique(df$Nom)))和工作正常。但是,如果我编写了像ht这样的函数,则会得到错误:“唯一只适用于向量”。

代码语言:javascript
复制
 createid<-function(var){
   x<- transform(var, id=match(var, unique(var)))
   ids<-paste0("id_",x[,2])
   return(ids)
 }
df$id<-createid(df$Nom)

类似地,如果Y写入以下函数,我将得到d$var中的错误:类型为“闭包”的对象不可替换

代码语言:javascript
复制
 createid<-function(d,var){
    x<- transform(d$var, id=match(d$var, unique(d$var)))
    ids<-paste0("id_",x[,2])
    return(ids)
  }
 df$id<-createid(d,Nom)

我认为在用R编写函数的方式上我有些不理解,特别是当您在数据帧中调用变量时。有人能帮我吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-27 13:03:27

不需要使用transform就可以做到这一点。正如@LyzandeR在评论中提到的,最好使用d[[var]]而不是d$var

代码语言:javascript
复制
createid <- function(d, var){
            d$id <- match(d[[var]], unique(d[[var]]))
             d }
createid(df, 'Nom')
#   Nom Var1 Var2 id
#1  N1  v11  v12  1
#2  N2    .    .  2
#3  N2    .    .  2
#4  N3  V32  V32  3

或者,如果您真的想使用$,那么您可以使用eval(parse(,但是这个路由并不推荐,也不是那么简单。

代码语言:javascript
复制
   createid1 <- function(d, var){
                 m1 <- match.call()
                 e1 <- eval(parse(text=paste0(deparse(m1$d),'$',m1$var)))
                 d$id <- match(e1, unique(e1))
                 d}

   createid1(df, 'Nom')
   #  Nom Var1 Var2 id
   #1  N1  v11  v12  1
   #2  N2    .    .  2
   #3  N2    .    .  2
   #4  N3  V32  V32  3

或者代替eval(parse

代码语言:javascript
复制
  createid2 <- function(d, var){
    args <- as.list(match.call())
    e1 <- eval(args$var, d)
    d$id <- match(e1, unique(e1))
    d
   }

 createid2(df, Nom)
 #  Nom Var1 Var2 id
 #1  N1  v11  v12  1
 #2  N2    .    .  2
 #3  N2    .    .  2
 #4  N3  V32  V32  3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28169475

复制
相关文章

相似问题

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