R未能在第15行评估。有人能告诉我它失败的原因吗? 这是一个简单的程序,它使所有数字长度为3的产品然后找到最大的这是一个回文数,例如9009。
largestpalndrome3 <- function(){
products3 <- c()
i <- 100
while(i <= 999){
j <- i
while(j <= 999){
products3[i] <- i*j
j <- j+1
}
i <- i+1
}
palindromes <- c()
i <- 1
for(prod in products3){
if(prod<100000){
prodcopy <- prod
o <- prodcopy %% 10
prodcopy = prodcopy%/%10
t <- prodcopy %% 10
prodcopy = prodcopy%/%10
h <- prodcopy %% 10
prodcopy = prodcopy%/%10
th <- prodcopy %% 10
prodcopy = prodcopy%/%10
tth <- prodcopy %% 10
hth <- prodcopy%/%10
if(o==hth & t==tth & h==th){
palindromes[i] <- prod
}
}
if(prod>100000){
prodcopy <- prod
o <- prodcopy %% 10
prodcopy = prodcopy%/%10
t <- prodcopy %% 10
prodcopy = prodcopy%/%10
h <- prodcopy %% 10
prodcopy = prodcopy%/%10
prodcopy = prodcopy%/%10
tth <- prodcopy %% 10
prodcopy = prodcopy%/%10
hth <- prodcopy%%10
m <- prodcopy%/%10
if(o==m & t==hth & h==tth){
palindromes[i] <- prod
}
}
i <- i + 1
}
}
答案 0 :(得分:3)
这可以解决您的问题:
palindromes = function(n=3){
A1 = c((10^n-1):10^(n-1))
A2 = as.character(A1)
ltrs= sapply(A2,substring,1:n,1:n)
rownames(ltrs)=c(1:n)
ltrs= ltrs[order(rownames(ltrs),decreasing=T),]
ltrs= apply(ltrs,2,paste,collapse='')
A2 = as.numeric(paste(A2,ltrs,sep=''))
A3= combn((10^n-1):10^(n-1),2)
A4 = A3[1,]*A3[2,]
largestpal = max(A2[ A2 %in% A4])
prod2= A3[,which(A4==largestpal)]
return(list('Number of Digits'=n, 'Largest Palindrome'=largestpal,'multiple of'=prod2))
}
答案 1 :(得分:2)
您收到错误的原因在于您定义 product3 的方式,其前99个元素为NA
。
在使用值之前,您必须执行检查。一个简单的步骤是使用is.na()
检查。
这是一个小的变化,首先检查是否为NA ,如果不是,则继续进行。这会让你超越错误。
for(prod in products3){
if(!is.na(prod)) {
...
your code here
...
}
}
@AndresT为您提供了一种不同(且更有效)的方式来完成您的尝试。