我有一个小标题:
# A tibble: 2 × 2
read_seq unique_id
<chr> <dbl>
1 AATTGGCC 1
2 GGGTTT 2
Run Code Online (Sandbox Code Playgroud)
我想创建一个包含与read_seq相同大小的字符串的新变量。我做到了,但是有一个错误:
> r %>% mutate(y=paste(rep("H",width(read_seq)),sep=""))
Error in mutate_impl(.data, dots) : argument 'times' incorrect
Run Code Online (Sandbox Code Playgroud)
当我只尝试捕获read_seq宽度时,它可以工作:
> r %>% mutate(y=width(read_seq))
# A tibble: 2 × 3
read_seq unique_id y
<chr> <dbl> <int>
1 AATTGGCC 1 8
2 GGGTTT 2 6
Run Code Online (Sandbox Code Playgroud)
这是可重现性示例的dput():
r <- structure(list(read_seq = c("AATTGGCC", "GGGTTT"), unique_id = c(1,
2)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-2L), .Names = c("read_seq", "unique_id"))
Run Code Online (Sandbox Code Playgroud)
错误来自rep,times参数必须为1或与相同的长度x,在这里不是这种情况:
rep("H", c(1,2))
Error in rep("H", c(1, 2)) : invalid 'times' argument
Run Code Online (Sandbox Code Playgroud)
您可以strrep改用,x并times在必要时进行回收:
r %>% mutate(y = strrep("H",nchar(read_seq)))
# A tibble: 2 x 3
# read_seq unique_id y
# <chr> <dbl> <chr>
#1 AATTGGCC 1 HHHHHHHH
#2 GGGTTT 2 HHHHHH
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要一些大小相等的随机字符串,请使用stringi::stri_rand_strings:
r %>% mutate(y = stri_rand_strings(length(read_seq), nchar(read_seq)))
# A tibble: 2 x 3
# read_seq unique_id y
# <chr> <dbl> <chr>
#1 AATTGGCC 1 H0flAbNS
#2 GGGTTT 2 QrQOLj
Run Code Online (Sandbox Code Playgroud)