所以我是R的新手,并对我获得的任务有疑问。我被要求生成一个函数,通过“拆分”当前值并将所有非零数字的乘积加到前一个值(即x1 = 1032,x2 = 1032 +(1)()来生成序列中的下一个值的函数( 3)(2)= 1038)。这是我到目前为止的代码:
ListView
这成功地将数字拆分为向量,如split(1032)= 1 0 3 2,我知道一旦我摆脱了0,下一步是R中的简单prod(x)命令,但是我不能为我的生活弄清楚如何把零踢出去。非常感谢任何帮助!
答案 0 :(得分:0)
在控制台中输入您可能需要的组件的帮助页面:?"=="
,?"["
。
也许是一个让你入门的小贴士:
nums <- 1:10
nums2 <- nums[nums!=5]
请注意!
翻转逻辑语句。试试!TRUE
或!FALSE
。
在我看来,你正在努力解决这个问题。如果您需要以数字生成该序列的下一个X步骤,则可能需要for
循环(?"for"
)。
答案 1 :(得分:0)
看起来你解决了它。因此,对于比较学习,以下是其他用户可能接近它的方式:
seq2 <- function(start, n=1) { res <- numeric(n)
nxt <- function(x) {z <- strtoi(strsplit(toString(x),'')[[1]]);x+prod(z[!!z])}
for(i in 1:n) res[i] <- ifelse(i==1,nxt(start),nxt(res[i-1]));res}
测试:
seq2(1032)
[1] 1038
seq2(1032, 5)
[1] 1038 1062 1074 1102 1104