Привет,
Я думаю, что вам нужно добавить символ as.charcter следующим образом:
sapply(sequence.to_roman, function(x) as.character(if(grepl("^[1-9]\\d*$",x)) as.roman(x) else "Some symbols"))
> sapply(sequence.to_roman, function(x) as.character(if(grepl("^[1-9]\\d*$",x)) as.roman(x) else "Some symbols"))
1 2 V1 df 3
"I" "II" "Some symbols" "Some symbols" "III"
похоже, что сокращение вывода в sapply приведет к преобразованию класса roman обратно в егочисловое значение по умолчанию.Таким образом, преобразование всех выходных данных в char сначала предотвращает это.
try:
lapply(sequence.to_roman, function(x) if(grepl("^[1-9]\\d*$",x)) as.roman(x) else "Some symbols")
> lapply(sequence.to_roman, function(x) if(grepl("^[1-9]\\d*$",x)) as.roman(x) else "Some symbols")
[[1]]
[1] I
[[2]]
[1] II
[[3]]
[1] "Some symbols"
[[4]]
[1] "Some symbols"
[[5]]
[1] III
это то, что мы хотим, но:
unlist(lapply(sequence.to_roman, function(x) if(grepl("^[1-9]\\d*$",x)) as.roman(x) else "Some symbols"))
> unlist(lapply(sequence.to_roman, function(x) if(grepl("^[1-9]\\d*$",x)) as.roman(x) else "Some symbols"))
[1] "1" "2" "Some symbols" "Some symbols" "3"
также дает формы перекодирования.
, возможно, болеевидимое описание, что вызывает проблему:
> as.roman("3")
[1] III
> as.character(as.roman("3"))
[1] "III"
> c(as.roman("3"), "test")
[1] "3" "test"
> c(as.character(as.roman("3")), "test")
[1] "III" "test"