将 for 循环中的元素视为对象,而不是字符串

Posted

技术标签:

【中文标题】将 for 循环中的元素视为对象,而不是字符串【英文标题】:Treat elements in for loop as objects, not strings 【发布时间】:2022-01-12 11:55:11 【问题描述】:

我想使用一个将向量中的元素视为对象的 for 循环。

df <- tibble(hallo1 = "test", hallo2.1 = "test", bye1 = "test", bye2.1 = "test")
segmente <- c("hallo", "bye")

for(i in segmente)
  assign(i, df[grepl(i, names(df))]) # first step
  assign(paste0(i, "_1"), i[!grepl("\\.", names(i))]) # second step

for 循环的第一步按预期工作,并将对象 halo 和 bye 创建为 tibbles。第二步没有按预期工作,因为,我假设,在

i[!grepl("\\.", names(i))]

i 被视为一个字符串,而不是被创建的元素 halo 和 bye,从而产生空字符串,而它们也应该是 tibbles,只包含不带“.”的列。

我如何编写它以便识别 i 是什么,在第一步中创建的对象?

【问题讨论】:

i 没有名字。而且i不是向量(写i[...]是什么意思) 在第二步中,“i”应该是两个 tibbles,hallo 和 bye,我想用 [ ... ] 括号对其进行子集。但是代码将它们标识为两个字符串。 试试get(i)[!grepl("\\.", names(get(i)))] 因为i 不是小标题。 这似乎有效。你想提交它作为答案吗? 我不知道这个社区的规则。我可以将其作为答案提交,但这是一个好方法吗? 【参考方案1】:

循环的第一步i 是“你好”并且没有名字。如果您想用名称“hallo”调用 tibble,请使用 get(i)

【讨论】:

以上是关于将 for 循环中的元素视为对象,而不是字符串的主要内容,如果未能解决你的问题,请参考以下文章

js-权威指南学习笔记19

for循环和for in的区别

for in循环介绍以及陷阱

python中的for循环相当于scratch中的啥循环?

Perl 将 '<' 视为常规字符,而不是输出重定向

python中的for i in range怎么用?