我是R的新手,但在EViews中有一些编码经验。从我在这个网站上阅读的帖子中,我知道循环通常可以用R中更快的代码替换。 所以,这是我的问题:我想在R中获得一个字符向量。每个"字符"将是由国家/地区代码和变量组成的变量名称。 所以如果我有两个国家和三个变量,我需要一个2x3 = 6个字符的向量。 这是我提出的代码:
spark-submit
非常感谢您的帮助
答案 0 :(得分:3)
以下应该做你想要的。 R中的许多函数已经被矢量化(例如paste
),这意味着如果向量长度不匹配,它们接受向量并使用R的常用重用/重复规则执行元素操作。
# Define your toy data (as character vectors)
allb <- c("a", "b", "c")
cty <- c("fr", "us")
# Get all combinations
all.comb <- expand.grid(x = allb, y = cty)
# Combine columns of generated matrix
list_pgo <- paste0(all.comb$x, "pgo", all.comb$y, "_id")
print(list_pgo)
#[1] "apgofr_id" "bpgofr_id" "cpgofr_id" "apgous_id" "bpgous_id" "cpgous_id"
编辑:当然存在其他方法和方法,但已经被矢量化的函数通常比可以认为是&#34;循环隐藏&的函数的apply-family快得多。 #34;仅
将上述内容与评论中的单行内容进行比较:
library("microbenchmark")
fun1 <-function() {
all.comb <- expand.grid(x = allb, y= cty)
paste0(all.comb$x,"pgo",all.comb$y,"_id")
}
fun2 <- function() {
apply(expand.grid(allb,cty), 1, function(x) paste(x[1],"pgo",x[2],"_id",sep=""))
}
microbenchmark(fun1(), fun2())
#Unit: microseconds
# expr min lq mean median uq max neval
# fun1() 88.80 136.7705 185.3204 150.1570 163.098 3722.469 100
# fun2() 246.32 286.9275 353.2598 305.8925 326.419 4920.156 100