【发布时间】:2019-12-22 09:02:21
【问题描述】:
我正在编写一个应用于许多单独矩阵的函数。每个矩阵有 5 列字符串文本。我想删除与另一个元素内的字符串完全匹配的一个字符串,然后应用更多的 stringr 函数,将其转换为数据框,然后重命名列,在最后一步中,我想向每个列名的末尾,因为我会将其应用于许多矩阵并且需要稍后识别列。
这与我编写的另一个函数非常相似,所以我不知道为什么它不起作用。我尝试通过填写这样的输入来单独运行每一行,并且效果很好:
Review1[,4] <- str_remove(Review1[,4], Review1[,3])
Review1[,4] <- str_sub(Review1[,4], 4, -4)
Review1[,4] <- str_trim(Review1[,4], "both")
Review1 <- as.data.frame(Review1)
colnames(Review1) <- c("Title", "Rating", "Date", "User", "Text")
Review1 <- Review1 %>% rename_all(paste0, 1)
但是当我运行这个函数时,似乎什么都没有发生。
Transform_Reviews <- function(x, y, z, a) {
x[,y] <- str_remove(x[,y], x[,z])
x[,y] <- str_sub(x[,y], 4, -4)
x[,y] <- str_trim(x[,y], "both")
x <- as.data.frame(x)
colnames(x) <- c("Title", "Rating", "Date", "User", "Text")
x <- x %>% rename_all(paste0, a)
}
Transform_Reviews(Review1, 4, 3, 1)
这是我收到的唯一警告消息。当我单独运行 str_remove 函数时,我也会收到此消息,但它仍然会更改元素。但是当我运行 UDF 时,它没有任何改变。
警告信息: 1:在 stri_replace_first_regex(string, pattern, fix_replacement(replacement), ... 中: 不支持空搜索模式
这是我正在使用的 Review1 部分的示例。
[,3] [,4]
[1,] "6 April 2014" "By Copnovelist on 6 April 2014"
[2,] "18 Dec. 2015" "By kenneth bell on 18 Dec. 2015"
[3,] "26 May 2015" "By Simon.B :-) on 26 May 2015"
[4,] "22 July 2013" "By Lilla Lukacs on 22 July 2013"
这是我希望输出的样子:
Date1 User1
1 6 April 2014 Copnovelist
2 18 Dec. 2015 kenneth bell
3 26 May 2015 Simon.B :-)
4 22 July 2013 Lilla Lukacs
【问题讨论】:
-
你能让这篇文章可复制我包括
dput(Review1)吗?还包括相同的预期输出。 -
我添加了一些附加信息。希望有帮助!
-
在你的UDF中,你可以在最后一行添加
return(x)然后尝试运行它。看看有没有效果? -
你知道吗,我唯一的问题是我在尝试使用该函数时没有使用赋值运算符。即使是像我这样的初学者,也很尴尬!感谢您查看它!
标签: r matrix indexing user-defined-functions stringr