需要帮助在 R 中循环连接
Posted
技术标签:
【中文标题】需要帮助在 R 中循环连接【英文标题】:Need help looping through concatenation in R 【发布时间】:2019-08-10 16:08:10 【问题描述】:您好,我正在尝试返回包含 iris 数据集中所有列的子集的字符串。我正在寻找的输出是 'iris$Sepal.Length', 'iris$Sepal.Width', 'iris$Petal.Length', 'iris$Petal.Width', 'iris$Species'。
我尝试了下面的代码,使用 paste0 函数执行了一个 for 循环,但没有返回任何内容。
for(i in colnames(iris))
paste0('iris$',i , collapse ="")
我该如何解决这个问题?
【问题讨论】:
你能解释一下你想用字符串向量做什么吗?这可能是一个 XY 问题,并且可能有更好的方法来解决您的问题。 【参考方案1】:paste0
是矢量化的,所以你可以直接做
paste0("iris$", names(iris))
#[1] "iris$Sepal.Length" "iris$Sepal.Width" "iris$Petal.Length"
# "iris$Petal.Width" "iris$Species"
在for
循环中,你需要明确地告诉 R 做事
for(i in colnames(iris))
print(paste0('iris$',i))
#[1] "iris$Sepal.Length"
#[1] "iris$Sepal.Width"
#[1] "iris$Petal.Length"
#[1] "iris$Petal.Width"
#[1] "iris$Species"
或者您可以将其存储在字符向量中
string_name <- character(length = ncol(iris))
for(i in seq_along(names(iris)))
string_name[i] <- paste0('iris$',names(iris)[i])
string_name
#[1] "iris$Sepal.Length" "iris$Sepal.Width"
#"iris$Petal.Length" "iris$Petal.Width" "iris$Species"
【讨论】:
【参考方案2】:使用你自己的逻辑,你的代码可以修正如下:
for( i in 1:length(colnames(iris)) )
print( paste0('iris$', colnames(iris)[i] , collapse ="") )
[1] "iris$Sepal.Length"
[1] "iris$Sepal.Width"
[1] "iris$Petal.Length"
[1] "iris$Petal.Width"
[1] "iris$Species"
但是@ronak-shah 的解决方案是优雅的。我只是想展示可以对您的特定循环进行的更正。
【讨论】:
这真的不是一个好的解决方案,绝对不应该是公认的答案;如果您想知道如何更正 OP 语法,请查看@RonakShah 的答案。然而,更重要的是,指出paste0
已经被矢量化(再次参见 Ronak 的帖子)是至关重要的。 SO 是关于(理想情况下)概括并适用于其他未来问题的最佳编码实践和解决方案的集合。
@MauritsEvers 我同意这不是最佳解决方案。根据 OP 的代码,他们似乎是初学者,其想法是引导他们完成逻辑。但是,为了保持最佳实践,如果您认为我应该删除此答案,请告诉我?请指教。以上是关于需要帮助在 R 中循环连接的主要内容,如果未能解决你的问题,请参考以下文章