1

動物園のオブジェクトに列を追加しようとしています。うまく機能するマージを見つけました

test = zoo(data.frame('x' = c(1,2,3)))
test = merge(test, 'x1' = 0)

ただし、列に動的に名前を付けようとすると、機能しなくなります

test = merge(test, paste0('x',1) = 0)
Error: unexpected '=' in "merge(test,paste0('x',1) ="

私はデータフレームを扱ってきましたが、同じ構文が機能します

test = data.frame('x' = c(1,2,3))
test[paste0('x',1)] = 0

誰かが問題の内容とこれを回避する方法を説明できますか?

4

3 に答える 3

1

試してくださいsetNames

setNames( merge(test, 0), c(names(test), paste0("x", 1)) )

またはnames<-.zooこのように:

test2 <- merge(test, 0)
names(test2) <- c(names(test), paste0("x", 1))
于 2013-09-23T14:14:12.467 に答える
1

このソリューションは非常に簡単でエレガントであることがわかりました。関数を使用してeval()、文字列を R コマンドとして解釈します。したがって、完全に自由に文字列を自由に組み立てることができます。

test = merge(test, paste0("x",1) = 0)
# does not work (see question)

test[,"x1"] <- 0
# does not work for uninitialized columns

test$x1 <- 0
# works to initialize a new column

# so lets trick R by assembling this command out of strings:
newcolumn <- "x1"
eval(parse(text=paste0("test$",newcolumn," <- 0")))
# welcome test$x1 :-)
于 2016-09-30T14:29:35.630 に答える
0

Merge は変数名として文字列を予期しますが、関数の戻り値である変数名を認識しません。なぜだめですか

test = zoo(data.frame('x' = c(1,2,3)))
var <- paste0('x',1)
test = merge(test, var = 0)
于 2013-09-23T07:57:56.967 に答える