R中的变量变换函数

时间:2014-02-19 07:24:54

标签: r

我正在尝试编写一个带变量&数据框作为输入,然后创建19 转化变量。

当我运行它时,我没有收到任何错误,但同时没有创建新变量。

请让我知道我哪里出错。

function(v,d) {
  attach(d)
  d$v1 <- log(v)
  d$v2 <- exp(v)
  d$v3 <- sqrt(v)
  d$v4 <- (v)^0.3333
  d$v5 <- (v)^2
  d$v6 <- (v)^3
  d$v7 <- sin(v)
  d$v8 <- cos(v)
  d$v9 <- tan(v)
  d$v10 <- 1/(v) 
  d$v11 <- 1/log(v)
  d$v12 <- 1/exp(v)
  d$v13 <- 1/sqrt(v)
  d$v14 <- 1/(v^0.3333)
  d$v15 <- 1/(v^2)
  d$v16 <- 1/(v^3) 
  d$v17 <- 1/sin(v)
  d$v18 <- 1/cos(v)
  d$v19 <- 1/tan(v)
}

2 个答案:

答案 0 :(得分:1)

我正在回答你的问题,但之后会看到评论:

trans = function(v) {
  ## Add in your other 15 variables ...
  d = data.frame(log(v), exp(v), sqrt(v), v^0.3333)
  colnames(d) =paste0("v", 1:ncol(d))
  return(d)
}
trans(runif(10))
  1. 请注意,我没有传递d,因为我强烈怀疑您正在创建一个空数据框以供在函数中使用。如果不是这种情况,那么传递d并使用类似

    的内容
    ##D is the original data frame
    D[, 1:ncol(d)] = d
    
  2. 由于所有列都是数字,因此矩阵可能更好。

答案 1 :(得分:0)

R函数是所谓的不可变的,意味着它们不会更改传入的参数。它们只能在副本上工作。

所以你需要返回新的数据框,否则它不会“粘住”。

myfunction = function(v, d) {
  d$v1 <- log(d[v])
  d$v2 <- exp(d[v])
  d$v3 <- sqrt(d[v])
  d$v4 <- (d[v])^0.3333
  d$v5 <- (d[v])^2
  d$v6 <- (d[v])^3
  d$v7 <- sin(d[v])
  d$v8 <- cos(d[v])
  d$v9 <- tan(d[v])
  d$v10 <- 1/(d[v]) 
  d$v11 <- 1/log(d[v])
  d$v12 <- 1/exp(d[v])
  d$v13 <- 1/sqrt(d[v])
  d$v14 <- 1/(d[v]^0.3333)
  d$v15 <- 1/(d[v]^2)
  d$v16 <- 1/(d[v]^3) 
  d$v17 <- 1/sin(d[v])
  d$v18 <- 1/cos(d[v])
  d$v19 <- 1/tan(d[v])
  return(d) # it must be returned, or the changes won't be applied
}

d = myfunction(d)