在R中的capture.output之后删除斜杠

时间:2017-11-17 16:50:11

标签: r paste

在R中,我需要将paste0的输出写入变量,并且需要在双引号之前去掉斜杠。

paste0('interpol_df[["gene',i, '"]][["y"]]')
[1] "interpol_df[[\"gene1565\"]][[\"y\"]]"

使用cat一只猫摆脱\

cat(paste0('interpol_df[["gene',i, '"]][["y"]]'))
interpol_df[["gene1565"]][["y"]]

要将结果写入变量,一只猫使用capture.output

capture.output(cat(paste0('interpol_df[["gene',i, '"]][["y"]]')))

\又回来了!

[1] "interpol_df[[\"gene1565\"]][[\"y\"]]"

sprintf也没有帮助。关于如何摆脱它的任何建议?

编辑:

这段代码带有for循环,如下所示:

inter_data<-NULL
for (i in 0:1565){
  y_col<-cat(paste('interpol_df[["gene',i, '"]][["y"]]'))
  inter_data<-rbind(inter_data,y_col)
  }

EDIT2:

通过这个循环,我想从以下数据帧中获取y值:

$gene949
$gene949$x
 [1] 1.000000 1.061224 1.122449 1.183673 1.244898 1.306122 1.367347 1.428571 1.489796 1.551020 1.612245 1.673469 1.734694 1.795918 1.857143 1.918367 1.979592 2.040816
[19] 2.102041 2.163265 2.224490 2.285714 2.346939 2.408163 2.469388 2.530612 2.591837 2.653061 2.714286 2.775510 2.836735 2.897959 2.959184 3.020408 3.081633 3.142857
[37] 3.204082 3.265306 3.326531 3.387755 3.448980 3.510204 3.571429 3.632653 3.693878 3.755102 3.816327 3.877551 3.938776 4.000000

$gene949$y
 [1] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
[15] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
[29] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.02984865 0.11939459 0.20894053 0.29848647 0.38803241 0.47757835 0.56712429 0.65667023 0.74621616
[43] 0.83576210 0.92530804 1.01485398 1.10439992 1.19394586 1.28349180 1.37303774 1.46258368


$gene950
$gene950$x
 [1] 1.000000 1.061224 1.122449 1.183673 1.244898 1.306122 1.367347 1.428571 1.489796 1.551020 1.612245 1.673469 1.734694 1.795918 1.857143 1.918367 1.979592 2.040816
[19] 2.102041 2.163265 2.224490 2.285714 2.346939 2.408163 2.469388 2.530612 2.591837 2.653061 2.714286 2.775510 2.836735 2.897959 2.959184 3.020408 3.081633 3.142857
[37] 3.204082 3.265306 3.326531 3.387755 3.448980 3.510204 3.571429 3.632653 3.693878 3.755102 3.816327 3.877551 3.938776 4.000000

$gene950$y
 [1]  0.00000000 -0.15429366 -0.30858732 -0.46288099 -0.61717465 -0.77146831 -0.92576197 -1.08005564 -1.23434930 -1.38864296 -1.54293662 -1.69723029 -1.85152395
[14] -2.00581761 -2.16011127 -2.31440493 -2.46869860 -2.34260266 -2.07631192 -1.81002118 -1.54373044 -1.27743971 -1.01114897 -0.74485823 -0.47856749 -0.21227675
[27]  0.05401399  0.32030472  0.58659546  0.85288620  1.11917694  1.38546768  1.65175842  1.83847450  1.86604127  1.89360805  1.92117482  1.94874159  1.97630836
[40]  2.00387514  2.03144191  2.05900868  2.08657546  2.11414223  2.14170900  2.16927578  2.19684255  2.22440932  2.25197610  2.27954287

正如所建议的那样,确实有更好的方法来实现它...

2 个答案:

答案 0 :(得分:1)

根据OP帖子中的编辑,如果我们需要抓取list vector中的'y'元素,那么,循环遍历list,获取names通过检查'y'并将元素子集

来获取逻辑索引
lapply(lst, function(x) x[names(x)=='y'])

或使用[

lapply(lst, `[`, 'y')

我们可以使用[[

删除嵌套部分
lapply(lst, `[[`, 'y')

数据

lst <- list(gene949 = list(x = 1:5, y = 6:10), gene950 = list(x = 11:20, y = 21:30))

答案 1 :(得分:0)

反斜杠并不是真的存在。它只显示以下字符(在本例中为引号)是特殊的。当您print(...)向控制台发送内容时,它会以对程序员有用的方式显示数据。在这种情况下,字符串将以代码的形式显示。

查看以下颜色,了解R将如何解释未转义的代码:

"interpol_df[["gene1565"]][["y"]]"

现在这里有逃脱:

"interpol_df[[\"gene1565\"]][[\"y\"]]"

语言定义列出了10.3.1: Constants中的其他转义字符。