正如后面的qazxsw poi中提到的,有一个从数字转换为罗马数字的功能。但是,在尝试进行非数字符号的过滤时进行转换
Convert roman numerals to numbers in R
数字保持不变。虽然它以元素方式完美运行。是函数as.roman还是符号表示(例如编码)表现错误?
NONHOLD,
我想你必须像这样添加一个as.character:
sequence.to_roman<-c(1,2,"V1","df",3)
sapply(sequence.to_roman, function(x) if(grepl("^[1-9]\\d*$",x)) as.roman(x) else "Some symbols")
看起来像sapply中输出的缩短会默认将类roman转换回其数值。所以首先将所有输出转换为char可以防止这种情
尝试:
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"
这是我们想要的,但是:
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"