這似乎是一個簡單的問題,但我不出來,我的天堂」在我看過的R手冊中運氣不錯。我想查找dim(x)
,但我想在一行中分配dim(x)[1]
到a
和dim(x)[2]
到b
。
我試過[a b] <- dim(x)
和c(a, b) <- dim(x)
,但都沒有工作。有沒有一種方法可以做到這一點?這似乎是一件非常基本的事情,應該很容易處理。
這似乎是一個簡單的問題,但我不出來,我的天堂」在我看過的R手冊中運氣不錯。我想查找dim(x)
,但我想在一行中分配dim(x)[1]
到a
和dim(x)[2]
到b
。
我試過[a b] <- dim(x)
和c(a, b) <- dim(x)
,但都沒有工作。有沒有一種方法可以做到這一點?這似乎是一件非常基本的事情,應該很容易處理。
這可能不是那麼簡單,你本來想一個解決方案,但是這能夠完成任務。如果你需要一次分配多個變量(你不知道你有多少個值),它也是一個非常方便的工具。
Output <- SomeFunction(x)
VariablesList <- letters[1:length(Output)]
for (i in seq(1, length(Output), by = 1)) {
assign(VariablesList[i], Output[i])
}
循環不是R中最有效的東西,但我多次使用過這個。我個人發現,在從具有未知數量條目的文件夾收集信息時特別有用。
編輯:而在這種情況下,輸出可以是任何長度(只要VariablesList更長)。
編輯#2:改變了VariablesList向量以允許更多的值,正如Liz所建議的。
這是一個非常好的解決方案,如果你有很多輸出,儘管可能不適合我的情況。不過,我可能會用'VariablesList < - letters [1:length(Output)]'替換你的第一行。 – 2012-07-25 15:07:24
好主意,我已經添加到我的文章。 – MikeZ 2012-07-25 15:32:10
這取決於a
和b
中的內容。如果他們只是數字試圖返回一個向量是這樣的:
dim <- function(x,y)
return(c(x,y))
dim(1,2)[1]
# [1] 1
dim(1,2)[2]
# [1] 2
如果a
和b
是別的東西,你可能要返回一個列表
dim <- function(x,y)
return(list(item1=x:y,item2=(2*x):(2*y)))
dim(1,2)[[1]]
[1] 1 2
dim(1,2)[[2]]
[1] 2 3 4
編輯:
試試這個:x <- c(1,2); names(x) <- c("a","b")
我對你的建議有點困惑。 'dim()'函數是內置的,我只是想調用'dim()'後調用任意對象'a'和'b'的尺寸'' – 2012-07-25 14:06:53
感謝您的建議 - 'name )'隻影響輸出的列名。如果您在運行該行後嘗試了類似「a * 3」的操作,則會出現錯誤。不幸的是,我認爲沒有內置的方式來做到這一點,所以我只需要添加幾條額外的行來處理它。 – 2012-07-25 14:20:56
看起來沒有辦法做到這一點。真正對付它的唯一方法是添加額外的行一對夫婦:
temp <- dim(x)
a <- temp[1]
b <- temp[2]
您也可以編寫自己的函數,它將始終創建一個全局函數a
和b
。但是,這是不可取的:
mydim <- function(x) {
out <- dim(x)
a <<- out[1]
b <<- out[2]
}
的「R」的方式來做到這一點是輸出的結果作爲一個列表或向量就像根據需要內置的功能也和訪問它們:
out <- dim(x)
out[1]
out[2]
R有很多其他語言缺乏的優秀列表和矢量理解,因此沒有這種多重分配功能。相反,它有一組豐富的函數,可以在沒有循環構造的情況下進入複雜的數據結構。
我知道這是作弊:'tmp < - dim(x); a < - tmp [1]; b < - tmp [2]' – sgibb 2012-07-25 13:58:34
好的解決方法:D – 2012-07-25 14:04:36
我會看看[這個問題](http://stackoverflow.com/questions/1826519/function-returning-more-than-one-value) 。最短的答案是否定的,R不這樣做。長久的回答是,您可以隨時使其適用於您的特定用例。但是在許多其他語言中沒有「多重任務」。 – Justin 2012-07-25 14:17:16