我正在尝试编写一个带变量&数据框作为输入,然后创建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)
}
答案 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))
请注意,我没有传递d
,因为我强烈怀疑您正在创建一个空数据框以供在函数中使用。如果不是这种情况,那么传递d
并使用类似
##D is the original data frame
D[, 1:ncol(d)] = d
由于所有列都是数字,因此矩阵可能更好。
答案 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)