首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R 0还是1为基础?

R 0还是1为基础?
EN

Stack Overflow用户
提问于 2013-01-16 02:07:48
回答 2查看 8.2K关注 0票数 5

我们在R中有以下代码(已经剥离到最基本的部分进行调试)

代码语言:javascript
复制
tgtStart = 29593
for (i in tgtStart:tgtStart)
{
    PricerData[i, 1] = 111
}
print(PricerData[29592,1])

PricerData是构造远远超过29593并且预先填充有NAs的矩阵。

我不明白的是,PricerData29592,1将更改为111,此代码打印111,而不是我们预期的NA。

为了让它更详细一点,我今天结束的代码是:

代码语言:javascript
复制
tgtStart = 29593
for (i in tgtStart:tgtStart)
{
    print(PricerData[i,1])
    print(PricerData[i-1,1])

    PricerData[i, 1] = 111

    print(PricerData[i,1])
    print(PricerData[i-1,1])
}
print(PricerData[29592,1])

它将打印:

代码语言:javascript
复制
[1] NA
[1] NA
[1] 111
[1] NA
[1] 111

不出所料,一直到最后,为什么开始之前的元素会发生变化?为什么不在循环中,只有在for循环关闭之后(哦,如果我们把29593改为29596,所有的工作都像预期的那样,我不理解。)

另外,我不会编码R,通常我会做C++,我理解R是1-基于它的向量,但请不要介意涵盖真正的基础知识。我们使用R版本2.4.1.5,x64

编辑:好的,很明显,我从我们的代码中删减了太多,所以对你来说问题已经解决了,这里是完整的函数,供参考,我不理解上面给出的输出

代码语言:javascript
复制
LoadPricer <- function(instrument, colo, simDate, sliceSize, startTime, endTime, pricerName, pricerSettings, returnEmptyMatrixIfFileNotFound = FALSE)
{

  fileName <- paste ( simulatorOutputBasePath, instrument, '\\', colo, '\\', format(simDate, '%Y%m%d'), '\\', sliceSize, '\\P#', pricerName, '#', pricerSettings, '.csv', sep='')   
    firstSliceRequest = GetSlicesSinceMidnight(startTime, sliceSize)
    lastSliceRequest = GetSlicesSinceMidnight(endTime, sliceSize)

    PricerData = as.matrix(matrix(NA, nrow=(lastSliceRequest - firstSliceRequest + 1), ncol = 1))

    if (file.exists(fileName))
    {
        # Load entire file
        AllData = as.data.frame(read.csv(fileName, header = TRUE, colClasses=c("customTimeFormat","numeric")))

        if (dim(AllData)[1] > 0)
        {
            firstSliceData = GetSlicesSinceMidnight(as.POSIXlt(AllData[1,1]), sliceSize)
            lastSliceData = GetSlicesSinceMidnight(as.POSIXlt(AllData[nrow(AllData),1]), sliceSize)

        if ( firstSliceData <= lastSliceRequest & lastSliceData >= firstSliceRequest )
            {
                tgtStart = max(1, firstSliceData - firstSliceRequest + 1)
                tgtEnd = min(lastSliceRequest - firstSliceRequest + 1, lastSliceData - firstSliceRequest + 1)
                srcStart = max(1, firstSliceRequest - firstSliceData + 1)
                srcEnd = min(lastSliceData - firstSliceData + 1, srcStart + tgtEnd - tgtStart)

        #PricerData[as.integer(tgtStart):as.integer(tgtEnd),1] = AllData[as.integer(srcStart):as.integer(srcEnd),2]
        for (i in tgtStart:tgtStart)
        {
          PricerData[i, 1] = 111# as.matrix(AllData[srcStart+i-tgtStart , 2])
        }
            }
        }
    }
    else
    {
        if (returnEmptyMatrixIfFileNotFound) PricerData = matrix(NA, nrow=0, ncol=2)
        print(paste('WARNING: Unable to load Pricer! File:', fileName))
    }

    return (PricerData)
}
EN

回答 2

Stack Overflow用户

发布于 2013-01-16 02:15:05

一个基于

代码语言:javascript
复制
> PricerData <- matrix(NA, 30000, ncol=1)
> tgtStart <- 29593
> for (i in tgtStart:tgtStart) PricerData[i, 1] <- 111
> print(PricerData[29592, 1])
[1] NA
> print(PricerData[29593, 1])
[1] 111
票数 10
EN

Stack Overflow用户

发布于 2013-01-16 02:18:26

但是你可以从tgtStart=29593开始

因此,它将使用i= 29593,因此它将替换PricerData29593,1= 111,而不是PricerData29592,1

代码语言:javascript
复制
> tgtStart = 29593
> for (i in tgtStart:tgtStart)
> {
>  PricerData[i, 1] = 111
> }
> print(PricerData[29592,1])
[1] NA
> print(PricerData[29593,1])
[1] 111
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14344025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档