0

我想通过首先对字符进行采样来用另一个字符替换字符串中的一个字符。我无法让它打印出字符而不是索引。

示例数据,标记为“尝试”:

L   0.970223325 -   0.019851117 X   0.007444169
K   0.962779156 -   0.027295285 Q   0.004962779
P   0.972704715 -   0.027295285 NA  0
C   0.970223325 -   0.027295285 L   0.00248139
V   0.970223325 -   0.027295285 T   0.00248139

我正在尝试使用加权概率对给定行的字符进行采样。

samp <- function(row) {
sample(try[row,seq(1, length(try), 2)], 1, prob = try[row,seq(2, length(try), 2)])
}

然后,我想使用所选字符替换给定字符串中的位置。

subchar <- function(string, pos, new) {
paste(substr(string, 1, pos-1), new , substr(string, pos+1, nchar(string)), sep='')
}

我的问题是 - 如果我这样做,例如

> subchar("KLMN", 3, samp(4))
[1] "KL1N"

但我希望它读作“KLCN”。As.character(samp(4)) 也不起作用。如何让它打印出字符而不是索引?

4

1 回答 1

1

出现问题是因为您的字母存储为factors而不是characters,并且samp返回的是data.frame.

C是您因素中的第一个级别,因此存储为1内部,并且as.character(由paste语句调用)在处理 mini-data.frame 时将其拉出:

samp(4)
  V1
4  C
as.character(samp(4))
[1] "1"

data.frame您可以通过 2 种方式解决此问题,或者在对 的samp调用中删除输出subchar,或者修改samp为这样做:

subchar("KLMN", 3, samp(4)[,1])
[1] "KLCN"

samp2 <- function(row) 
    { sample(try[row,seq(1, length(try), 2)], 1, prob = try[row,seq(2, length(try), 2)])[,1] 
    }

subchar("KLMN",3,samp2(4))
[1] "KLCN

您可能还会发现在子集中进行采样更容易,并且可以从那里删除 data.frame:

samp3 <- function(row){
 try[row,sample(seq(1,length(try),2),1,prob=try[row,seq(2,length(try),2)]),drop=TRUE]
 }
于 2012-07-11T11:29:06.777 回答