Regex 让Sappy拥有字符串元素

Regex 让Sappy拥有字符串元素,regex,r,Regex,R,我希望R以特定格式打印a中的所有元素(到给定的文本文件中)。我用的是: library(stringr) a <- c("aa", "bb", "cc") b <- sapply(a, function(x) cat(str_c("* ", x, "\n"))) 类似地,例如typeof(b[1])是“list”,但我希望它是一个字符串。我真的不明白这里发生了什么。是什么让R加上这个,我能做些什么来避免它 非常感谢 您可以使用paste0然后使用cat和sep参数。这样就不需

我希望R以特定格式打印
a
中的所有元素(到给定的文本文件中)。我用的是:

 library(stringr)
 a <- c("aa", "bb", "cc")
 b <- sapply(a, function(x) cat(str_c("* ", x, "\n")))
类似地,例如
typeof(b[1])
是“list”,但我希望它是一个字符串。我真的不明白这里发生了什么。是什么让R加上这个,我能做些什么来避免它


非常感谢

您可以使用
paste0
然后使用
cat
sep
参数。这样就不需要
sapply

> a <- c("aa", "bb", "cc")
> b <- paste0("* ", a)
> cat(b, sep = "\n")
# * aa
# * bb
# * cc
>AB类(b,sep=“\n”)
#*机管局
#*bb
#*抄送

cat
str_c
sapply
的组合就是您得到一个列表的原因
cat
首先打印,这就是为什么列表开头有
*aa\n*bb\n*cc

这里有一个使用正则表达式的替代方法

new  <- gsub("([[:alpha:]]{2})", "*\\1", a)
> cat(new, sep = "\n")
新类别(新,sep=“\n”)
表达式查找一行中包含两个字母的捕获组,并用星号和空格代替


然后,用新的行分隔符调用cat。

我想到的第一件事实际上是
sprintf

cat(sprintf("* %s", a), sep = "\n")

然而,这个问题并不完全清楚。在某种程度上,您似乎希望能够存储此结果,并在以后以这种方式使用它。在这种情况下,您可能需要考虑定义自己的<代码>打印< /代码>类,这不是太难做。

例如,这里有一个非常基本的
print
函数,用于
class
“myClass”的对象:

它也将与基本的
列表一起工作:

bL <- split(a, a)
class(bL) <- c(class(bL), "myClass")
bL
# *  aa 
# *  bb 
# *  cc
正如你所料:

typeof(bL[[1]])
# [1] "character"
为了好玩,还可以试试

## unclass(bL)
## unclass(b)
## print.myClass(a)

你想要的确切结果是什么
cat
不用于打印到文件(通常)。它用于打印到标准输出。另外,请在您的帖子中提及
library(stringr)
,以便人们知道您正在使用它。嗨,Richard,我想要的结果是,它应该只打印*aa\n*bb\n*cc,而不打印$aa NULL内容。
bL <- split(a, a)
class(bL) <- c(class(bL), "myClass")
bL
# *  aa 
# *  bb 
# *  cc
print.default(bL)
# $aa
# [1] "aa"
# 
# $bb
# [1] "bb"
# 
# $cc
# [1] "cc"
# 
# attr(,"class")
# [1] "list"    "myClass"
typeof(bL[[1]])
# [1] "character"
## unclass(bL)
## unclass(b)
## print.myClass(a)