2
dats <- list(df1 = data.frame(A=sample(1:3), B = sample(11:13)),
df2 = data.frame(AA=sample(1:3), BB = sample(11:13)))
S.T.
> dats
$df1
A B
1 2 12
2 3 11
3 1 13
$df2
AA BB
1 1 13
2 2 12
3 3 11
我想將所有大寫字母的所有變量名更改爲較低。我能做到這一點有一個循環,但不知何故不能得到這個lapply
調用工作:
dats <- lapply(dats, function(x)
names(x)<-tolower(names(x)))
導致:
> dats
$df1
[1] "a" "b"
$df2
[1] "aa" "bb"
,而期望的結果是:
> dats
$df1
a b
1 2 12
2 3 11
3 1 13
$df2
aa bb
1 1 13
2 2 12
3 3 11
非常感謝。我錯過了大括號,但爲什麼需要返回x?很難理解「如果你不在功能的末尾使用'return',最後一次求值的表達式返回」 – Fred
你的例子中大括號是不必要的;我不得不添加它們,因爲我有不止一行。你函數中的「最後評估表達式」是names(x)< - tolower(names(x))'。該賦值的結果分別是「a」,「b」和「aa」,「bb」,這就是函數返回的結果。例如,嘗試'(names(x)< - tolower(names(x)))''。 –
好的,檢查幫助文件(?函數不起作用,'函數'),現在明白了。這個例子清楚說明了函數(x,y){z < - x^2 + y^2; return(x + y + z)}':返回值與表達式中評估的返回值不同,這增加了更多的自由度。在我的情況下,所需的返回值是數據幀,而不是向量'names(x)'。 – Fred