无法将 user-defined 字符串替换函数应用于 tibble 的内容
Trouble applying a user-defined string replace function to contents of a tibble
我有一个 user-defined 函数来替换文本模式。这似乎适用于数据框,但不适用于小标题。
fixcontents <- function(mydf, mypattern1, mypattern2, mycol) {
mydf[ ,mycol] <- sub(mypattern1, mypattern2, mydf[ ,mycol])
return(mydf)
}
mydf1 <- data.frame(col1 = c(1,2), col2 = c("aaa", "bbb"))
mytbl1 <- tibble(col1 = c(1,2), col2 = c("aaa", "bbb"))
fixcontents(mydf1, "(b{3})", "\1X", 2) # works
mydf1
col1 col2
1 1 aaa
2 2 bbbX
fixcontents(mytbl1, "(b{3})", "\1_", 2) # does not work (??)
mytbl1
# A tibble: 2 x 2
col1 col2
<dbl> <chr>
1 1 aaa
2 2 bbb
为什么会出现这种行为,如何在小标题中操作数据?
使用 [
的子集对 tibbles 的处理方式不同。子集数据帧 returns 一个向量,而 tibble returns tibble back。
mydf1[, 2]
#[1] aaa bbb
#Levels: aaa bbb
mytbl1[, 2]
# A tibble: 2 x 1
# col2
# <chr>
#1 aaa
#2 bbb
尝试使用 [[
对
进行子集化
fixcontents <- function(mydf, mypattern1, mypattern2, mycol) {
mydf[[mycol]] <- sub(mypattern1, mypattern2, mydf[[mycol]])
return(mydf)
}
fixcontents(mydf1, "(b{3})", "\1X", 2)
# col1 col2
#1 1 aaa
#2 2 bbbX
fixcontents(mytbl1, "(b{3})", "\1_", 2)
# A tibble: 2 x 2
# col1 col2
# <dbl> <chr>
#1 1 aaa
#2 2 bbb_
我有一个 user-defined 函数来替换文本模式。这似乎适用于数据框,但不适用于小标题。
fixcontents <- function(mydf, mypattern1, mypattern2, mycol) {
mydf[ ,mycol] <- sub(mypattern1, mypattern2, mydf[ ,mycol])
return(mydf)
}
mydf1 <- data.frame(col1 = c(1,2), col2 = c("aaa", "bbb"))
mytbl1 <- tibble(col1 = c(1,2), col2 = c("aaa", "bbb"))
fixcontents(mydf1, "(b{3})", "\1X", 2) # works
mydf1
col1 col2
1 1 aaa
2 2 bbbX
fixcontents(mytbl1, "(b{3})", "\1_", 2) # does not work (??)
mytbl1
# A tibble: 2 x 2
col1 col2
<dbl> <chr>
1 1 aaa
2 2 bbb
为什么会出现这种行为,如何在小标题中操作数据?
使用 [
的子集对 tibbles 的处理方式不同。子集数据帧 returns 一个向量,而 tibble returns tibble back。
mydf1[, 2]
#[1] aaa bbb
#Levels: aaa bbb
mytbl1[, 2]
# A tibble: 2 x 1
# col2
# <chr>
#1 aaa
#2 bbb
尝试使用 [[
对
fixcontents <- function(mydf, mypattern1, mypattern2, mycol) {
mydf[[mycol]] <- sub(mypattern1, mypattern2, mydf[[mycol]])
return(mydf)
}
fixcontents(mydf1, "(b{3})", "\1X", 2)
# col1 col2
#1 1 aaa
#2 2 bbbX
fixcontents(mytbl1, "(b{3})", "\1_", 2)
# A tibble: 2 x 2
# col1 col2
# <dbl> <chr>
#1 1 aaa
#2 2 bbb_