1

尝试使用 rxSetVarInfo 更改 XDF 的变量名称。

我想合并几个具有常见 var 名称的数据集。(我知道 rxMerge 可以/将在需要的地方附加到文件名。我希望拥有比这更多的控制权。)

这有效:

outLetter<- "A"
exp <- list(pct.A = list(newName = paste0("X.pct.",outLetter)))
rxSetVarInfo(varInfo = exp, data = tempXDFFile)

那就是我知道原始列名的地方,pct.A. 如果是动态的呢?outLetter如果这是在一个用不同的 's多次调用的函数中怎么办?(“A”没有硬编码。)
这不起作用:

function(outLetter){
  exp <- list(paste0("pct.",outLetter) = list(newName = paste0("X.pct.",outLetter)))
  rxSetVarInfo(varInfo = exp, data = tempXDFFile)
}

也没有:

exp <- parse(text = exp)
rxSetVarInfo(varInfo = exp, data = tempXDFFile)

是的,我可以对所有排列进行硬编码。试图找到一种更优雅的方法。

4

1 回答 1

0

请尝试以下代码:

dynamicName <- function(outLetter){
  exp <- vector(mode="list", length=1)
  names(exp) <- paste0("pct.",outLetter)
  exp[[paste0("pct.",outLetter)]] = list(newName = paste0("X.pct.",outLetter))
  rxSetVarInfo(varInfo = exp, data = tempXDFFile)
}

在调用 rxSetVarInfo() 之前,“exp”包含:

$pct.A
$pct.A$newName
[1] "X.pct.A"

运行您的“这有效”案例,我看到:

> outLetter<- "A"
> exp <- list(pct.A = list(newName = paste0("X.pct.",outLetter)))
>
> exp
$pct.A
$pct.A$newName
[1] "X.pct.A"

希望这可以帮助!

请注意,请确保您的动态命名函数可以访问变量“tempXDFFile”,您可能需要考虑将其作为参数传递,例如:

dynamicName <- function(outLetter, data){
  exp <- vector(mode="list", length=1)
  names(exp) <- paste0("pct.",outLetter)
  exp[[paste0("pct.",outLetter)]] = list(newName = paste0("X.pct.",outLetter))
  rxSetVarInfo(varInfo = exp, data = data)
}
于 2017-05-04T18:37:55.820 回答