我正在尝试在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 =“”)))) 所以首先提取表格更容易。我现在将编写一个循环来重新打包列表。
答案 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代码,请参阅“解决方案”做类似的事情
但是,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与我联系。