我需要更新代码以使其更加动态。
我的数据框有时可以包含6个变量,有时可以包含9个变量。我需要基于有问题的变量创建一个数据框,其中包含所有不同的变量和相应的二阶变量。
我的代码过去通常是这样
df3 <- data.frame(poly(test$hub, test$vacations, test$slot, test$income, test$market_size, test$average_distance_m, degree = 2, raw = TRUE))
df6 <- data.frame(poly(test$hub, test$vacations, test$slot, test$income, test$market_size, test$average_distance_m, test$noise1, test$noise2, test$noise3, degree = 2, raw = TRUE))
我想知道是否有什么方法可以使它更具动态性。 我尝试过
df <- data.frame(poly(test, degree = 2, raw = TRUE))
测试将在哪里更新,但我在FUN(X,Y,...)中不断收到错误:二进制运算符的非数字参数
答案 0 :(得分:0)
您需要使用do.call
my_funct = function(dat) do.call(poly,c(unname(dat),raw=TRUE,degree=2))
(df_2vars <- my_funct(iris[1:2]))
(df_4vars <- my_funct(iris[1:4]))
答案 1 :(得分:0)
如果将数据转换为矩阵,则最终尝试将起作用。
例如
# typing all variables in manually
original = with(mtcars, poly(mpg, cyl, disp, hp, drat, wt, degree=2, raw=TRUE))
#OR
# convert dataframe to matrix and apply poly (lazily using indices instead of names)
using_matrix = poly(as.matrix(mtcars[1:6]), degree=2, raw=TRUE)
all.equal(original, using_matrix, check.attributes=FALSE)
# TRUE