在下面的最小示例中,我尝试vars在回归公式中使用字符串的值.但是,我只能将变量名称字符串("v2 + v3 + v4")传递给公式,而不是该字符串的实际含义(例如,"v2"是dat $ v2).
我知道有更好的方法来运行回归(例如lm(v1 ~ v2 + v3 + v4, data=dat)).我的情况更复杂,我想弄清楚如何在公式中使用字符串.有什么想法吗?
更新以下代码
# minimal example
# create data frame
v1 <- rnorm(10)
v2 <- sample(c(0,1), 10, replace=TRUE)
v3 <- rnorm(10)
v4 <- rnorm(10)
dat <- cbind(v1, v2, v3, v4)
dat <- as.data.frame(dat)
# create objects of column names
c.2 <- colnames(dat)[2]
c.3 <- colnames(dat)[3]
c.4 <- colnames(dat)[4]
# shortcut to get to the type of object my full code produces
vars <- …Run Code Online (Sandbox Code Playgroud) 我有(1)评级参考表,以及(2)基于这些评级随机生成结果的函数,并根据生成的结果更新评级.
虽然下面的可重复示例有更简单的解决方案,但预期的应用是根据他们的Elo评级来模拟对手之间的结果,并且在每轮之后更新评级以便运行模拟"热".
在这里,我有一个评级参考表,ref并使用该函数genResult生成随机结果并使用全局赋值更新参考表.
set.seed(123)
ref <- data.frame(id = LETTERS[1:5],
rating = round(runif(5, 100, 200)))
genResult <- function(ref) {
id_i <- LETTERS[floor(runif(1, 1, 5))]
score_i <- round(rnorm(1, 0, 20))
ref[ref$id == id_i,]$rating <- ref[ref$id == id_i,]$rating + score_i
result_i <- data.frame(id = id_i, score = score_i)
# assign('ref', ref, envir=.GlobalEnv)
ref <<- ref
return(list(result_i, ref))
}
Run Code Online (Sandbox Code Playgroud)
复制此功能两次,我们可以看到ref按预期更新.
replicate(2, genResult(ref), simplify = F)
Run Code Online (Sandbox Code Playgroud)
回到这里,我们可以看到参考表在两次迭代中的每次迭代中都会更新.
[[1]]
[[1]][[1]]
id score
1 A 1
[[1]][[2]]
id rating
1 A …Run Code Online (Sandbox Code Playgroud) 在过去,我编写了R代码,需要for循环内部的循环.通常,此代码执行起来相当耗时.我在网上看过这是R工作循环的结果.我还读到在R中使用for循环,例如C++或Java,可以加快计算时间.
有没有人有这方面的经验,可以指出一些我能读到的简单例子?
你也可以为for循环调用另一种语言,但循环中的所有内容仍然是标准的R代码吗?