【发布时间】:2017-01-28 17:10:10
【问题描述】:
我正在尝试将下面已经有效的代码转换为函数。
类似的情况,dcast + DT,已经讨论过here!但我无法解决这样的问题。
我想要实现的是:
- 只更改多行代码的两个参数,并且
- 将函数中每一行创建的对象写入工作目录
这是已经生效的代码:
result1 <- dcast(setDT(data), customer_id ~ paste0("num_of_oranges",period), value.var = "num_of_oranges", sum)
result2 <- dcast(setDT(data), customer_id ~ paste0("num_of_oranges",period) + paste0("SIGN_",sign), value.var = "num_of_oranges", sum)
result3 <- dcast(setDT(data), customer_id ~ paste0("num_of_oranges",period) + paste0("SIGN_",sign) + paste0("ORIGIN_",origin), value.var = "num_of_oranges", sum)
我对该功能的尝试:
create.Feature
test1 <- dcast(df, df[[id]] ~ paste0("col1",df[[period]]), value.var = df[["col1"]], stat)
return(test1)
test2 <- dcast(df, df[[id]] ~ paste0("col1",df[[period]]) + paste0("SIGN",df[[sign]]), value.var = df[["col1"]], stat)
return(test2)
test3 <- dcast(df, df[[id]] ~ paste0("col1",df[[period]]) + paste0("SIGN",df[[sign]]) + paste0("ORIGIN",df[[origin]]), value.var = df[["col1"]], stat)
return(test3)
还有电话:
test_result <- create.Feature("num_of_oranges", sum)
我收到以下错误: .subset2(x, i, exact = exact) 中的错误:级别 1 没有这样的索引
有人吗?
【问题讨论】:
-
paste0(col1, df[[period]])而不是paste0("col1", df[[period]])? -
是的,但是如何处理 value.var 部分?
-
value.var = col1不行吗?如果您的函数是create.Feature <- function(col1, stat),它只会按原样读取col1。所以写create.Feature("num_of_oranges", sum)会被读成value.var = "num_of_oranges", sum,和你在第一个代码块中写的一样。 -
否,返回:value_vars(value.var, names(data)) 中的错误:在“数据”中找不到 value.var 值 [col1]。
-
这里有一个额外的页面解释了使用 DT 的函数,但它们比常规函数要复杂得多。 stackoverflow.com/questions/15790743/…
标签: r function data.table dcast