在循环中替换变量?

时间:2012-09-03 20:51:46

标签: r variables loops

我正在尝试在R中编写循环,但我认为命名法不正确,因为它不会创建新对象,这里是我想要做的简化示例:

for i in (1:8) {

List_i <-List
colsToGrab_i <-grep(predefinedRegex_i, colnames(List_i$table))
List_i$table <-  List_i$table[,predefinedRegex_i]
}

我创建了'predeRegex'es 1:8,grep应该用它来搜索 循环创建一个名为“List_i”的对象,然后找不到“predefinedRegex_i”。

我已尝试在i前面加上“i”和$的引号,也是[i],但这些都不起作用。

任何帮助非常感谢。谢谢。

使用@ RyanGrammel的答案::

#CREATING regular expressions for grabbing sets groups 1 -7 ::::
g_1 <- "DC*"
g_2 <- "BN_._X.*"
g_3 <- "BN_a*"
g_4 <- "BN_b*"
g_5 <- "BN_a_X.*"
g_6 <- "BN_b_X.*"
g_7 <- "BN_._Y.*"

for i in (1:8) 
{
assign(x = paste("tableA_", i, sep=""), value = BigList$tableA)
assign(x = paste("Forgrep_", i, sep=""), value = colnames(get(x = paste("tableA_", i, sep=""))))
assign(x = paste("grab_", i, sep=""), value = grep((get(x = paste("g_",i, sep=""))), (get(x = paste("Forgrep_",i, sep="")))))
assign(x = paste("tableA_", i, sep=""), value = BigList$tableA[,get(x = paste("grab_",i, sep=""))])
}

对“BigList”中的每个表重复此循环。 我发现我无法从中提取列名     (get(x = paste(“BigList_”,i,“$ tableA”sep =“”)))))

或来自     (get = x(paste(“BigList_”,i,“[[2]]”sep =“”)))) 所以首先提取表格更容易。我现在将编写一个循环来重新打包列表。

1 个答案:

答案 0 :(得分:2)

<强>问题

你的语法是关闭的:你似乎不明白R究竟是如何处理变量名的。

for(i in 1:10) name_i <- 1

上述代码未指定name_1,name_2,....,name_10。它一遍又一遍地指定“name_i”

  • 要创建列表,请调用'list()',而不是List

  • 在循环中创建变量List_i不会分配List_1,List_2,...,List_8。

它反复为名称“List_i”分配一个空列表。想一想;如果R以您尝试的方式命名变量,则同样可能将变量命名为L1st_1,L2st_2 ......对于某些有效的R代码,请参阅“解决方案”做类似的事情

  • 'predefinedRegex_i'不会被解释为尝试获取变量'predefinedRegex_1','predefinedRegex_2'等等。

但是,get(paste0(“predefinedRegex_”,i))以这种方式解释。使用它时,确保 i 实际上有一个值。见下文。

<强>解决方案:

通常,使用它来动态分配变量(List_1,List_2,..)

assign(x = paste0("prefix_", i), value = i)

如果 i 等于199,则此代码将变量prefix_199赋值为199.

通常,使用此方法动态获取您使用上述代码段分配的变量。

get(x = paste0("prefix_", i))

如果 i 等于199,则此代码获取变量prefix_199。

那应该解决问题的关键;如果您需要任何进一步的帮助,请随时在此处要求澄清,或通过我的Twitter Feed与我联系。