我正在使用RStudio(版本3.0.2)和R.
的新手在我的任务中,想在RScript中创建以下变量并赋值。
AA_1_11 <- 1
AA_2_22 <- 2
AA_3_33 <- 3
AA_4_44 <- 4
BB_1_11 <- 5
BB_2_22 <- 6
BB_3_33 <- 7
BB_4_44 <- 8
而是静态创建上面的8行。我打算动态编码那些代码,以便在将来变量扩展时代码是有用的,即AA,BB,以后可以扩展到CC,DD等。
尝试以下代码:
char_list <- c("AA", "BB")
num_list <- c("1_11", "2_22", "3_33", "4_44")
i=1
char_num_array <-vector()
for (char in char_list) {
for (num in num_list) {
char_num_array[i] <- paste(char,num, sep = '_')
i <- i + 1
}
}
(char_num_array)
for (j in 1:length(char_num_array)){
char_num_array[j] <- j
}
虽然我可以将所有变量名称创建为字符串名称,但不知道为什么实际变量不是在RStudio中创建的,如下图所示。
希望你能指导我。
更新
感谢大家的帮助。我真的想制作单独的变量,以便我可以监视RStudio上值的变化,因为变量将不断用于其他操作,即拟合,重新安装等。
感谢JDB。我已将代码修改为以下,其中 i 可以替换为其他数学方程式。
char_list <- c("AA", "BB")
num_list <- c("1_11", "2_22", "3_33", "4_44")
i <- 1
for (char in char_list) {
for (num in num_list) {
assign(paste(char,num, sep = '_'), i)
i <- i + 1
}
}
答案 0 :(得分:6)
你不需要循环。执行此类操作的首选“R方式”是将所有这些变量保留在列表中。除了保持全局环境“干净”之外,这使得更容易引用变量,并且还可以更容易地在以后对它们执行操作。
例如,对于此操作,您可以执行
char_list <- c("AA", "BB")
num_list <- c("1_11", "2_22", "3_33", "4_44")
x <- setNames(
as.list(1:8),
paste(rep(char_list, each=4), num_list, sep="_")
)
现在您想要的变量都存储在x
names(x)
# [1] "AA_1_11" "AA_2_22" "AA_3_33" "AA_4_44" "BB_1_11"
# [6] "BB_2_22" "BB_3_33" "BB_4_44"
可以使用$
按姓名访问,[
和[[
使用with()
,使用x$AA_1_11
# [1] 1
x[[5]]
# [1] 5
with(x, c(AA_1_11, BB_4_44))
# [1] 1 8
等等按名称或号码访问...
{{1}}
答案 1 :(得分:3)
您的代码中没有任何意义,您要告诉R创建这些变量。你的第一个循环成功地创建了你想要的名字的矢量列表(一个字符串),但它并没有将任何值作为变量赋值。
但是,R非常擅长动态变量创建。为什么要将相同的值分配给一堆不同的变量?你能用这些变量创建一个数据框吗?array <- data.frame(variables = numeric(length(char_num_array)))
rownames(array) <- char_num_array
array
variables
AA_2_22 0
AA_3_33 0
AA_4_44 0
BB_1_11 0
BB_2_22 0
BB_3_33 0
BB_4_44 0
如果确实想要将它们创建为单独的变量,则可以使用assign():
for(item in char_num_array) assign(item, 1)