r语言 - 使用带有str_replace的pipe会导致强制转换的警告



我试图做一个非常简单的替换str_replace_all()stringr。我可以用一种方式让它工作,但不能用另一种方式。我刚刚开始学习管道函数的复杂之处,显然还没有完全理解它。下面是一个表示我的意思的表达式:

df <- data.frame(team=c('team_A', 'team_B', 'team_C', 'team_D'),
conference=c('West', 'West', 'East', 'East'),
points=c(88, 97, 94, 104))
#replace "West" with "Western" in the conference column
df$conference <- str_replace(df$conference, "West", "Western")
#>[1] "Western" "Western" "East"    "East"  

#try the same with pipes
df |> 
select(conference) |> 
str_replace("West", "Western")
#>[1] "c("Western", "West", "East", "East")"
Warning message:
In stri_replace_first_regex(string, pattern, fix_replacement(replacement),  :
argument is not an atomic vector; coercing

我认为R告诉我select()语句的结果不是一个向量,并且一个向量正在被强制。这很好,除了它不能给我相同的结果。

我不确定如何在不使用长R名称(在这种情况下df$conference)的情况下指定str_replace()函数的列。我几乎可以肯定我以前在管道中看到过str_replace,但是错误消息对我来说有点太神秘了,我无法弄清楚发生了什么。

str_replace的第一个参数应该是一个字符向量,它在问题的第一个示例中,但在第二个示例中它是一个数据帧。来自str_replace帮助文件:

用法:

str_replace(string, pattern, replacement)

剪断…

参数:

string:输入向量。要么是字符向量,要么是别的什么

这个工作并返回一个数据帧(或者如果你使用dplyr用mutate替换transform)。

df |> 
transform(conference = str_replace(conference, "West", "Western"))
##     team conference points
## 1 team_A    Western     88
## 2 team_B    Western     97
## 3 team_C       East     94
## 4 team_D       East    104

这也可以工作,并给出字符向量结果:

df$conference |> str_replace("West", "Western")
## [1] "Western" "Western" "East"    "East"   

最新更新